Browse Source

修复模糊查询

ai_300_new
zhouhaibin 3 weeks ago
parent
commit
86f573c82e
  1. 2
      ruoyi-admin/src/main/resources/application-dev.yml
  2. 2
      ruoyi-admin/src/main/resources/application-test.yml
  3. 2
      ruoyi-admin/src/main/resources/application.yml
  4. 217
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java
  5. 114
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/TaskProcessor.java
  6. 122
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTaskChecklistController.java
  7. 44
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java
  8. 59
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTaskChecklist.java
  9. 33
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java
  10. 43
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTaskChecklistBo.java
  11. 42
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTaskSupplementBo.java
  12. 26
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java
  13. 52
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTaskChecklistVo.java
  14. 50
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTaskSupplementVo.java
  15. 30
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java
  16. 31
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualTaskChecklistMapper.java
  17. 8
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualTaskSupplementMapper.java
  18. 70
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTaskChecklistService.java
  19. 87
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTaskSupplementService.java
  20. 13
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java
  21. 48
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java
  22. 182
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTaskChecklistServiceImpl.java
  23. 155
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTaskSupplementServiceImpl.java
  24. 161
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java
  25. 86
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java
  26. 119
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/TenderTaskServiceImpl.java
  27. 47
      zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java
  28. 39
      zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualTaskChecklistMapper.xml
  29. 7
      zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualTaskSupplementMapper.xml

2
ruoyi-admin/src/main/resources/application-dev.yml

@ -52,7 +52,7 @@ spring:
# 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
# username: root
# password: root
url: jdbc:mysql://10.1.21.250:3306/aitable?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
# url: jdbc:mysql://218.0.1.42:53306/aitable?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: 'HXj-6nR|D8xy*h#!I&:('

2
ruoyi-admin/src/main/resources/application-test.yml

@ -50,7 +50,7 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://localhost:3306/aitable?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: HXj-6nR|D8xy*h#!I&:(
# 从库数据源

2
ruoyi-admin/src/main/resources/application.yml

@ -71,7 +71,7 @@ spring:
basename: i18n/messages
profiles:
#@profiles.active@
active: test
active: dev
# 文件上传
servlet:
multipart:

217
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java

@ -0,0 +1,217 @@
package org.dromara.productManagement.common.service;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.service.DictService;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.productManagement.domain.ModelPrompts;
import org.dromara.productManagement.domain.ModelUserPromptssetting;
import org.dromara.productManagement.domain.bo.BaseTaskBo;
import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo;
import org.dromara.productManagement.mapper.DocumentTasksPermissionsMapper;
import org.dromara.productManagement.mapper.ModelPromptsMapper;
import org.dromara.productManagement.mapper.ModelUserPromptssettingMapper;
import org.dromara.productManagement.service.IDocumentTasksPermissionsService;
import org.dromara.productManagement.utils.MyHttpUtils;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 任务处理器抽象基类
*
* @param <T> 任务数据类型
* @param <E> 任务实体类型
*/
@Data
@RequiredArgsConstructor
public abstract class AbstractTaskProcessor<T extends BaseTaskBo, E> implements TaskProcessor<T, E> {
protected final ISysOssService ossService;
protected final ModelPromptsMapper modelPromptsMapper;
protected final ModelUserPromptssettingMapper modelUserPromptssettingMapper;
protected final DocumentTasksPermissionsMapper documentTasksPermissionsMapper;
protected final IDocumentTasksPermissionsService documentTasksPermissionsService;
protected final DictService dictTypeService;
@Value("${chat.filePath}")
protected String fileRootPath;
@Value("${chat.chatUrl}")
protected String chatUrl;
@Value("${chat.tempfilePath}")
protected String tempfilePath;
@Override
public Boolean processTask(T taskData, String taskType) throws IOException, InterruptedException {
List<String> taskNames = taskData.getTaskNameList();
Long userId = LoginHelper.getUserId();
// 校验提示词
validatePrompts(taskNames, taskData, taskType);
// 处理用户提示词设置
handleUserPromptsSetting(userId, taskData, taskType);
// 验证用户任务权限
documentTasksPermissionsService.validateUserTaskPermissions(taskType, taskNames, userId);
// 处理文件相关操作
FileProcessResult fileResult = processFile(taskData.getOssId());
return processTaskItems(taskNames, taskData, fileResult, taskType);
}
@Override
public void validatePrompts(List<String> taskNames, T taskData, String taskType) {
taskNames.forEach(taskName -> {
ModelPrompts modelPrompts = modelPromptsMapper.selectOne(Wrappers.<ModelPrompts>lambdaQuery()
.eq(ModelPrompts::getTaskType, taskType)
.eq(ModelPrompts::getTaskName, taskName)
.eq(ModelPrompts::getTaskIndustry, taskData.getTaskIndustry())
.eq(ModelPrompts::getTaskRegion, taskData.getTaskRegion()));
if(modelPrompts == null) {
String label = dictTypeService.getDictLabel(taskType, taskName);
throw new RuntimeException("任务名称:["+label+"],当前任务所属区域或所属行业不存在模型,请联系管理员配置");
}
});
}
@Override
public void handleUserPromptsSetting(Long userId, T taskData, String taskType) {
ModelUserPromptssetting promptssetting = modelUserPromptssettingMapper.selectOne(
Wrappers.<ModelUserPromptssetting>lambdaQuery()
.eq(ModelUserPromptssetting::getUserId, userId)
.eq(ModelUserPromptssetting::getTaskType, taskType));
if(promptssetting != null) {
promptssetting.setTaskIndustry(taskData.getTaskIndustry());
promptssetting.setTaskRegion(taskData.getTaskRegion());
promptssetting.setTaskType(taskType);
modelUserPromptssettingMapper.updateById(promptssetting);
} else {
ModelUserPromptssetting userPromptssetting = new ModelUserPromptssetting();
userPromptssetting.setUserId(userId);
userPromptssetting.setTaskIndustry(taskData.getTaskIndustry());
userPromptssetting.setTaskRegion(taskData.getTaskRegion());
userPromptssetting.setTaskType(taskType);
modelUserPromptssettingMapper.insert(userPromptssetting);
}
}
@Override
public FileProcessResult processFile(Long ossId) throws IOException, InterruptedException {
SysOssVo fileInfo = ossService.getById(ossId);
String fileName = fileInfo.getOriginalName();
String filePath = fileRootPath + fileInfo.getFileName();
// 处理文件转换
if(!fileName.toLowerCase().endsWith(".docx")) {
filePath = convertToDocx(filePath, fileName);
}
return new FileProcessResult(fileInfo.getOriginalName(), filePath);
}
/**
* 转换文件为docx格式
*/
private String convertToDocx(String filePath, String fileName) throws IOException, InterruptedException {
String parentPath = new File(filePath).getParent();
ProcessBuilder builder = new ProcessBuilder("libreoffice", "--headless", "--convert-to", "docx", filePath, "--outdir", parentPath);
Process process = builder.start();
int completed = process.waitFor();
if (completed != 0) {
InputStream errorStream = process.getErrorStream();
String errorMessage = new String(errorStream.readAllBytes());
process.destroyForcibly();
throw new RuntimeException(fileName + "转docx失败,请检查文件是否正确~ 错误信息: " + errorMessage);
}
process.destroyForcibly();
return getDocxFilePath(filePath);
}
/**
* 获取转换后的docx文件路径
*/
private String getDocxFilePath(String filePath) {
int lastDotIndex = filePath.lastIndexOf('.');
return lastDotIndex == -1 ? filePath + ".docx" : filePath.substring(0, lastDotIndex) + ".docx";
}
@Override
public Long calculatePriority(String taskName) {
// 默认优先级为1
Long priority = 1L;
// 如果不是超级管理员,则获取用户特定的任务优先级
if (!StpUtil.hasRole("superadmin")) {
DocumentTasksPermissionsVo permissionsVo = documentTasksPermissionsMapper
.selectDocumentPermissionsByUserIdAndTaskName(
LoginHelper.getUserId(),
taskName
);
if (permissionsVo != null) {
priority = permissionsVo.getPriority();
}
}
return priority;
}
/**
* 处理具体任务项
*/
protected Boolean processTaskItems(List<String> taskNames, T taskData, FileProcessResult fileResult, String taskType) {
boolean flag = false;
for (String taskName : taskNames) {
// 转换为对应的任务实体
E taskEntity = convertToTaskEntity(taskData, taskName, fileResult.getFileName(), taskType);
// 在插入数据库前调用扩展点
beforeTaskInsert(taskData, taskName, fileResult);
// 保存实体到数据库
flag = saveTaskEntity(taskEntity);
if (!flag) {
throw new RuntimeException("新增任务失败");
}
// 获取任务ID
Long taskId = getTaskId(taskEntity);
// 在发送消息前调用扩展点
beforeTaskMessageSent(taskId, taskName, taskData);
// 计算优先级并发送消息
Long priority = calculatePriority(taskName);
MyHttpUtils.sendTaskStartMessage(chatUrl + "/back/taskStart",
taskId, taskName, fileResult.getFilePath(), priority);
}
return flag;
}
@Override
public void beforeTaskInsert(T taskData, String taskName, FileProcessResult fileResult) {
// 默认空实现,子类可以覆盖
}
@Override
public void beforeTaskMessageSent(Long taskId, String taskName, T taskData) {
// 默认空实现,子类可以覆盖
}
}

114
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/TaskProcessor.java

@ -0,0 +1,114 @@
package org.dromara.productManagement.common.service;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.IOException;
import java.util.List;
/**
* 任务处理器接口
* 定义了处理任务的核心方法
* @param <T> 任务数据类型
* @param <E> 任务实体类型
*/
public interface TaskProcessor<T, E> {
/**
* 文件处理结果
*/
@Data
@AllArgsConstructor
class FileProcessResult {
private String fileName;
private String filePath;
}
/**
* 处理任务
*
* @param taskData 任务数据
* @param taskType 任务类型
* @return 处理结果
*/
Boolean processTask(T taskData, String taskType) throws IOException, InterruptedException;
/**
* 验证提示词
*
* @param taskNames 任务名称列表
* @param taskData 任务数据
* @param taskType 任务类型
*/
void validatePrompts(List<String> taskNames, T taskData, String taskType);
/**
* 处理用户提示词设置
*
* @param userId 用户ID
* @param taskData 任务数据
* @param taskType 任务类型
*/
void handleUserPromptsSetting(Long userId, T taskData, String taskType);
/**
* 处理文件
*
* @param ossId 文件ID
* @return 处理结果
*/
FileProcessResult processFile(Long ossId) throws IOException, InterruptedException;
/**
* 计算任务优先级
*
* @param taskName 任务名称
* @return 优先级
*/
Long calculatePriority(String taskName);
/**
* 任务插入数据库前的扩展点
*
* @param taskData 任务数据
* @param taskName 任务名称
* @param fileResult 文件处理结果
*/
void beforeTaskInsert(T taskData, String taskName, FileProcessResult fileResult);
/**
* 任务消息发送前的扩展点
*
* @param taskId 任务ID
* @param taskName 任务名称
* @param taskData 任务数据
*/
void beforeTaskMessageSent(Long taskId, String taskName, T taskData);
/**
* 将任务数据转换为任务实体
*
* @param taskData 任务数据
* @param taskName 任务名称
* @param fileName 文件名
* @param taskType 任务类型
* @return 任务实体
*/
E convertToTaskEntity(T taskData, String taskName, String fileName, String taskType);
/**
* 保存任务实体到数据库
*
* @param entity 任务实体
* @return 是否保存成功
*/
boolean saveTaskEntity(E entity);
/**
* 获取任务ID
*
* @param entity 任务实体
* @return 任务ID
*/
Long getTaskId(E entity);
}

122
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTaskChecklistController.java

@ -0,0 +1,122 @@
package org.dromara.productManagement.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo;
import org.dromara.productManagement.domain.bo.ContractualTaskChecklistBo;
import org.dromara.productManagement.service.IContractualTaskChecklistService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 合同任务审查清单
*
* @author Lion Li
* @date 2025-05-16
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/productManagement/ContractualTaskChecklist")
public class ContractualTaskChecklistController extends BaseController {
private final IContractualTaskChecklistService contractualTaskChecklistService;
/**
* 查询合同任务审查清单列表
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:list")
@GetMapping("/list")
public TableDataInfo<ContractualTaskChecklistVo> list(ContractualTaskChecklistBo bo, PageQuery pageQuery) {
return contractualTaskChecklistService.queryPageList(bo, pageQuery);
}
/**
* 查询合同任务审查清单列表
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:list")
@GetMapping("/queryList")
public R<List<ContractualTaskChecklistVo>> list(ContractualTaskChecklistBo bo) {
return R.ok(contractualTaskChecklistService.queryList(bo));
}
/**
* 导出合同任务审查清单列表
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:export")
@Log(title = "合同任务审查清单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ContractualTaskChecklistBo bo, HttpServletResponse response) {
List<ContractualTaskChecklistVo> list = contractualTaskChecklistService.queryList(bo);
ExcelUtil.exportExcel(list, "合同任务审查清单", ContractualTaskChecklistVo.class, response);
}
/**
* 获取合同任务审查清单详细信息
*
* @param id 主键
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:query")
@GetMapping("/{id}")
public R<ContractualTaskChecklistVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(contractualTaskChecklistService.queryById(id));
}
/**
* 获取合同任务审查清单详细信息
*
* @param id 主键
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:query")
@GetMapping("/queryByGroupId/{id}")
public R<List<ContractualTaskChecklistVo>> queryByGroupId(@NotNull(message = "主键不能为空")
@PathVariable String id) {
return R.ok(contractualTaskChecklistService.queryByGroupId(id));
}
/**
* 新增合同任务审查清单
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:add")
@Log(title = "合同任务审查清单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody List<ContractualTaskChecklistBo> boList) {
return toAjax(contractualTaskChecklistService.insertByBoList(boList));
}
/**
* 修改合同任务审查清单
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:edit")
@Log(title = "合同任务审查清单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody List<ContractualTaskChecklistBo> boList) {
return toAjax(contractualTaskChecklistService.updateByBoList(boList));
}
/**
* 删除合同任务审查清单
*
* @param ids 主键串
*/
@SaCheckPermission("productManagement:ContractualTaskChecklist:remove")
@Log(title = "合同任务审查清单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] ids) {
return toAjax(contractualTaskChecklistService.deleteWithValidByIds(List.of(ids), true));
}
}

44
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java

@ -2,6 +2,8 @@ package org.dromara.productManagement.controller;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
@ -55,8 +57,8 @@ public class ContractualTasksController extends BaseController {
@Log(title = "合同任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ContractualTasksBo bo, HttpServletResponse response) {
List<DocumentTasksVo> list = contractualTasksService.queryList(bo);
ExcelUtil.exportExcel(list, "合同任务", DocumentTasksVo.class, response);
List<ContractualTasksVo> list = contractualTasksService.queryList(bo);
ExcelUtil.exportExcel(list, "合同任务", ContractualTasksVo.class, response);
}
/**
@ -66,7 +68,7 @@ public class ContractualTasksController extends BaseController {
*/
@SaCheckPermission("productManagement:ContractualTasks:query")
@GetMapping("/{id}")
public R<DocumentTasksVo> getInfo(@NotNull(message = "主键不能为空")
public R<ContractualTasksVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(contractualTasksService.queryById(id));
}
@ -105,4 +107,40 @@ public class ContractualTasksController extends BaseController {
@PathVariable Long[] ids) {
return toAjax(contractualTasksService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 分析合同文档
*
* @param ossId 文档OSS ID
*/
@GetMapping("/analyzeContract")
public R<Map<String, Object>> analyzeContract(@RequestParam String ossId) {
try {
// 获取合同基本信息
Map<String, Object> contractInfo = contractualTasksService.getContractBaseInfo(ossId);
// 如果有错误,直接返回
if (contractInfo.containsKey("error")) {
return R.fail("合同分析失败: " + contractInfo.get("error"));
}
// 调用AI接口分析文档
Map<String, String> params = new HashMap<>();
params.put("ossId", ossId);
params.put("filePath", (String) contractInfo.get("filePath"));
// 使用通用请求方法调用AI接口
Map<String, Object> aiResult = org.dromara.productManagement.utils.MyHttpUtils.sendSyncRequest(
"http://localhost:1025/v1/chat/completions", params);
// 合并两个结果
Map<String, Object> result = new HashMap<>(contractInfo);
result.putAll(aiResult);
return R.ok(result);
} catch (Exception e) {
e.printStackTrace();
return R.fail("合同分析失败: " + e.getMessage());
}
}
}

59
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTaskChecklist.java

@ -0,0 +1,59 @@
package org.dromara.productManagement.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 合同任务审查清单对象 contractual_task_checklist
*
* @author Lion Li
* @date 2025-05-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("contractual_task_checklist")
public class ContractualTaskChecklist extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 清单名称
*/
private String name;
/**
* 清单项内容
*/
private String checklistItem;
/**
* 排序
*/
private Long sortOrder;
private String checklistItemDesc;
/**
*
*/
@TableLogic
private String delFlag;
/**
*
*/
@Version
private Long version;
private String groupId;
}

33
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java

@ -83,5 +83,38 @@ public class ContractualTasks extends TenantEntity {
*/
private String taskId;
/**
* 任务类型
*/
private String taskType;
/**
* 合同角色
*/
private String contractPartyRole;
/**
* 审查清单
*/
private String checklistId;
/**
* 审查重点
*/
private String focusPointsId;
/**
* 甲方
*/
private String partyA;
/**
* 乙方
*/
private String partyB;
/**
* 审查组件
*/
private String reviewComponents;
}

43
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTaskChecklistBo.java

@ -0,0 +1,43 @@
package org.dromara.productManagement.domain.bo;
import org.dromara.productManagement.domain.ContractualTaskChecklist;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 合同任务审查清单业务对象 contractual_task_checklist
*
* @author Lion Li
* @date 2025-05-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ContractualTaskChecklist.class, reverseConvertGenerate = false)
public class ContractualTaskChecklistBo extends BaseEntity {
/**
* id
*/
private Long id;
/**
* 清单名称
*/
@NotBlank(message = "清单名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 清单项内容
*/
@NotBlank(message = "清单项内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String checklistItem;
private String checklistItemDesc;
private String groupId;
}

42
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTaskSupplementBo.java

@ -1,42 +0,0 @@
package org.dromara.productManagement.domain.bo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.productManagement.domain.ContractualTaskSupplement;
/**
* 合同任务额外字段
业务对象 contractual_task_supplement
*
* @author Lion Li
* @date 2025-01-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ContractualTaskSupplement.class, reverseConvertGenerate = false)
public class ContractualTaskSupplementBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* 任务id
*/
@NotNull(message = "任务id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long documentTasksId;
/**
* 合同角色
*/
@NotBlank(message = "合同角色不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractPartyRole;
}

26
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java

@ -34,6 +34,32 @@ public class ContractualTasksBo extends BaseTaskBo {
*/
@NotBlank(message = "合同角色不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractPartyRole;
/**
* 审查清单
*/
private String checklistId;
/**
* 审查重点
*/
private String focusPointsId;
/**
* 甲方
*/
private String partyA;
/**
* 乙方
*/
private String partyB;
/**
* 审查组件
*/
private String reviewComponents;
// /**
// * 模型所属行业
// */

52
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTaskChecklistVo.java

@ -0,0 +1,52 @@
package org.dromara.productManagement.domain.vo;
import org.dromara.productManagement.domain.ContractualTaskChecklist;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 合同任务审查清单视图对象 contractual_task_checklist
*
* @author Lion Li
* @date 2025-05-16
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ContractualTaskChecklist.class)
public class ContractualTaskChecklistVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 清单名称
*/
@ExcelProperty(value = "清单名称")
private String name;
/**
* 清单项内容
*/
@ExcelProperty(value = "清单项内容")
private String checklistItem;
private String checklistItemDesc;
private int checklistItemNum;
private String groupId;
}

50
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTaskSupplementVo.java

@ -1,50 +0,0 @@
package org.dromara.productManagement.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.productManagement.domain.ContractualTaskSupplement;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 合同任务额外字段
视图对象 contractual_task_supplement
*
* @author Lion Li
* @date 2025-01-21
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ContractualTaskSupplement.class)
public class ContractualTaskSupplementVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 任务id
*/
@ExcelProperty(value = "任务id")
private Long documentTasksId;
/**
* 合同角色
*/
@ExcelProperty(value = "合同角色")
private String contractPartyRole;
}

30
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java

@ -44,4 +44,34 @@ public class ContractualTasksVo extends BaseTaskVo implements Serializable {
@ExcelProperty(value = "合同角色")
private String contractPartyRole;
/**
* 审查清单
*/
@ExcelProperty(value = "审查清单")
private String checklistId;
/**
* 审查重点
*/
@ExcelProperty(value = "审查重点")
private String focusPointsId;
/**
* 甲方
*/
@ExcelProperty(value = "甲方")
private String partyA;
/**
* 乙方
*/
@ExcelProperty(value = "乙方")
private String partyB;
/**
* 审查组件
*/
@ExcelProperty(value = "审查组件")
private String reviewComponents;
private Long groupId;
}

31
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualTaskChecklistMapper.java

@ -0,0 +1,31 @@
package org.dromara.productManagement.mapper;
import org.dromara.productManagement.domain.ContractualTaskChecklist;
import org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 合同任务审查清单Mapper接口
*
* @author Lion Li
* @date 2025-05-16
*/
public interface ContractualTaskChecklistMapper extends BaseMapperPlus<ContractualTaskChecklist, ContractualTaskChecklistVo> {
/**
* 按name和groupId分组查询
*/
Page<ContractualTaskChecklistVo> selectGroupPage(Page<ContractualTaskChecklistVo> page, String name);
/**
* 真实删除数据
*/
int realDelete(String groupId);
/**
* 按name和groupId分组查询列表
*/
List<ContractualTaskChecklistVo> selectGroupList(String name);
}

8
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualTaskSupplementMapper.java

@ -1,8 +0,0 @@
package org.dromara.productManagement.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.productManagement.domain.ContractualTaskSupplement;
import org.dromara.productManagement.domain.vo.ContractualTaskSupplementVo;
public interface ContractualTaskSupplementMapper extends BaseMapperPlus<ContractualTaskSupplement, ContractualTaskSupplementVo> {
}

70
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTaskChecklistService.java

@ -0,0 +1,70 @@
package org.dromara.productManagement.service;
import org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo;
import org.dromara.productManagement.domain.bo.ContractualTaskChecklistBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 合同任务审查清单Service接口
*
* @author Lion Li
* @date 2025-05-16
*/
public interface IContractualTaskChecklistService {
/**
* 查询合同任务审查清单
*
* @param id 主键
* @return 合同任务审查清单
*/
ContractualTaskChecklistVo queryById(Long id);
/**
* 分页查询合同任务审查清单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同任务审查清单分页列表
*/
TableDataInfo<ContractualTaskChecklistVo> queryPageList(ContractualTaskChecklistBo bo, PageQuery pageQuery);
/**
* 查询符合条件的合同任务审查清单列表
*
* @param bo 查询条件
* @return 合同任务审查清单列表
*/
List<ContractualTaskChecklistVo> queryList(ContractualTaskChecklistBo bo);
/**
* 批量新增合同任务审查清单
*
* @param boList 合同任务审查清单列表
* @return 是否新增成功
*/
Boolean insertByBoList(List<ContractualTaskChecklistBo> boList);
/**
* 批量修改合同任务审查清单
*
* @param boList 合同任务审查清单列表
* @return 是否修改成功
*/
Boolean updateByBoList(List<ContractualTaskChecklistBo> boList);
/**
* 校验并批量删除合同任务审查清单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
List<ContractualTaskChecklistVo> queryByGroupId(String id);
}

87
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTaskSupplementService.java

@ -1,87 +0,0 @@
package org.dromara.productManagement.service;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.productManagement.domain.bo.ContractualTaskSupplementBo;
import org.dromara.productManagement.domain.vo.ContractualTaskSupplementVo;
import java.util.Collection;
import java.util.List;
/**
* 合同任务额外字段
Service接口
*
* @author Lion Li
* @date 2025-01-21
*/
public interface IContractualTaskSupplementService {
/**
* 查询合同任务额外字段
*
* @param id 主键
* @return 合同任务额外字段
*/
ContractualTaskSupplementVo queryById(Long id);
/**
* 分页查询合同任务额外字段
列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同任务额外字段
分页列表
*/
TableDataInfo<ContractualTaskSupplementVo> queryPageList(ContractualTaskSupplementBo bo, PageQuery pageQuery);
/**
* 查询符合条件的合同任务额外字段
列表
*
* @param bo 查询条件
* @return 合同任务额外字段
列表
*/
List<ContractualTaskSupplementVo> queryList(ContractualTaskSupplementBo bo);
/**
* 新增合同任务额外字段
*
* @param bo 合同任务额外字段
* @return 是否新增成功
*/
Boolean insertByBo(ContractualTaskSupplementBo bo);
/**
* 修改合同任务额外字段
*
* @param bo 合同任务额外字段
* @return 是否修改成功
*/
Boolean updateByBo(ContractualTaskSupplementBo bo);
/**
* 校验并批量删除合同任务额外字段
信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据合同id查询合同方角色
* @param id
* @return
*/
String queryContractPartyRole(String id);
}

13
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java

@ -9,6 +9,7 @@ import org.dromara.productManagement.domain.vo.DocumentTasksVo;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 合同任务Service接口
@ -24,7 +25,7 @@ public interface IContractualTasksService {
* @param id 主键
* @return 合同任务
*/
DocumentTasksVo queryById(Long id);
ContractualTasksVo queryById(Long id);
/**
* 分页查询合同任务列表
@ -41,7 +42,7 @@ public interface IContractualTasksService {
* @param bo 查询条件
* @return 合同任务列表
*/
List<DocumentTasksVo> queryList(ContractualTasksBo bo);
List<ContractualTasksVo> queryList(ContractualTasksBo bo);
/**
* 新增合同任务
@ -68,4 +69,12 @@ public interface IContractualTasksService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据ossId获取合同基本信息
*
* @param ossId OSS文件ID
* @return 合同基本信息包括文件路径甲乙方信息等
*/
Map<String, Object> getContractBaseInfo(String ossId);
}

48
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java

@ -1,8 +1,10 @@
package org.dromara.productManagement.service;
import org.dromara.productManagement.domain.DocumentTaskGroup;
import org.dromara.productManagement.domain.vo.DocumentTasksVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.productManagement.domain.DocumentTasks;
import org.dromara.productManagement.domain.bo.DocumentTasksBo;
import org.dromara.productManagement.domain.vo.DocumentTasksVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.system.domain.vo.SysOssVo;
@ -29,27 +31,34 @@ public interface IDocumentTasksService {
DocumentTasksVo queryById(Long id);
/**
* 分页查询文档任务列表
* 查询文档任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 文档任务分页列表
* @param bo 文档任务
* @return 文档任务集合
*/
TableDataInfo<DocumentTaskGroup> queryPageList(DocumentTasksBo bo, PageQuery pageQuery);
/**
* 查询符合条件的文档任务列表
* 查询文档任务列表
*
* @param bo 查询条件
* @return 文档任务列表
* @param bo 文档任务
* @return 文档任务集合
*/
List<DocumentTasksVo> queryList(DocumentTasksBo bo);
/**
* 构建查询条件
*
* @param bo 查询参数
* @return 查询条件包装器
*/
LambdaQueryWrapper<DocumentTasks> buildQueryWrapper(DocumentTasksBo bo);
/**
* 新增文档任务
*
* @param bo 文档任务
* @return 是否新增成功
* @return 结果
*/
Boolean insertByBo(DocumentTasksBo bo) throws IOException, InterruptedException;
@ -57,19 +66,32 @@ public interface IDocumentTasksService {
* 修改文档任务
*
* @param bo 文档任务
* @return 是否修改成功
* @return 结果
*/
Boolean updateByBo(DocumentTasksBo bo);
/**
* 校验并批量删除文档任务信息
*
* @param ids 删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
* @param ids 需要删除的主键集合
* @param isValid 是否校验,true-删除前校验,false-校验
* @return 结果
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 停止任务
*
* @param id 需要停止的任务ID
* @return 结果
*/
int stopTask(Long id);
/**
* 上传文件
*
* @param file 需要上传的文件
* @return 上传结果
*/
SysOssVo uploadFile(MultipartFile file) throws IOException, InterruptedException;
}

182
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTaskChecklistServiceImpl.java

@ -0,0 +1,182 @@
package org.dromara.productManagement.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.productManagement.domain.bo.ContractualTaskChecklistBo;
import org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo;
import org.dromara.productManagement.domain.ContractualTaskChecklist;
import org.dromara.productManagement.mapper.ContractualTaskChecklistMapper;
import org.dromara.productManagement.service.IContractualTaskChecklistService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.UUID;
/**
* 合同任务审查清单Service业务层处理
*
* @author Lion Li
* @date 2025-05-16
*/
@RequiredArgsConstructor
@Service
public class ContractualTaskChecklistServiceImpl implements IContractualTaskChecklistService {
private final ContractualTaskChecklistMapper baseMapper;
/**
* 查询合同任务审查清单
*
* @param id 主键
* @return 合同任务审查清单
*/
@Override
public ContractualTaskChecklistVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询合同任务审查清单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同任务审查清单分页列表
*/
@Override
public TableDataInfo<ContractualTaskChecklistVo> queryPageList(ContractualTaskChecklistBo bo, PageQuery pageQuery) {
Page<ContractualTaskChecklistVo> page = baseMapper.selectGroupPage(pageQuery.build(), bo.getName());
return TableDataInfo.build(page);
}
/**
* 查询符合条件的合同任务审查清单列表
*
* @param bo 查询条件
* @return 合同任务审查清单列表
*/
@Override
public List<ContractualTaskChecklistVo> queryList(ContractualTaskChecklistBo bo) {
return baseMapper.selectGroupList(bo.getName());
}
private LambdaQueryWrapper<ContractualTaskChecklist> buildQueryWrapper(ContractualTaskChecklistBo bo) {
LambdaQueryWrapper<ContractualTaskChecklist> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), ContractualTaskChecklist::getName, bo.getName());
Long userId = LoginHelper.getUserId();
if(!StpUtil.hasRole("superadmin")){
lqw.eq(userId != null, ContractualTaskChecklist::getCreateBy, userId);
}
return lqw;
}
// /**
// * 新增合同任务审查清单
// *
// * @param bo 合同任务审查清单
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(ContractualTaskChecklistBo bo) {
// ContractualTaskChecklist add = MapstructUtils.convert(bo, ContractualTaskChecklist.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
// return flag;
// }
// /**
// * 修改合同任务审查清单
// *
// * @param bo 合同任务审查清单
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(ContractualTaskChecklistBo bo) {
// ContractualTaskChecklist update = MapstructUtils.convert(bo, ContractualTaskChecklist.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ContractualTaskChecklist entity){
//TODO 做一些数据校验,如唯一约束
if(StringUtils.isBlank(entity.getName())){
throw new ServiceException("清单名称不能为空");
}
if(StringUtils.isBlank(entity.getChecklistItem())){
throw new ServiceException("清单项不能为空");
}
//name 不能重复
LambdaQueryWrapper<ContractualTaskChecklist> lqw = Wrappers.lambdaQuery();
lqw.eq(ContractualTaskChecklist::getName, entity.getName());
List<ContractualTaskChecklist> list = baseMapper.selectList(lqw);
if(list.size() > 0){
throw new ServiceException("清单名称不能重复");
}
}
/**
* 批量新增合同任务审查清单
*/
@Override
public Boolean insertByBoList(List<ContractualTaskChecklistBo> boList) {
List<ContractualTaskChecklist> list = MapstructUtils.convert(boList, ContractualTaskChecklist.class);
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
validEntityBeforeSave(list.get(0));
for (ContractualTaskChecklist contractualTaskChecklist : list) {
contractualTaskChecklist.setGroupId(uuid);
baseMapper.insert(contractualTaskChecklist);
}
return true;
}
/**
* 批量修改合同任务审查清单
*/
@Override
public Boolean updateByBoList(List<ContractualTaskChecklistBo> boList) {
baseMapper.realDelete(boList.get(0).getGroupId());
insertByBoList(boList);
return true;
}
/**
* 校验并批量删除合同任务审查清单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
baseMapper.realDelete(ids.iterator().next());
return true;
}
@Override
public List<ContractualTaskChecklistVo> queryByGroupId(String id) {
LambdaQueryWrapper<ContractualTaskChecklist> lqw = Wrappers.lambdaQuery();
lqw.eq(ContractualTaskChecklist::getGroupId, id);
return baseMapper.selectVoList(lqw);
}
}

155
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTaskSupplementServiceImpl.java

@ -1,155 +0,0 @@
package org.dromara.productManagement.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.productManagement.domain.ContractualTaskSupplement;
import org.dromara.productManagement.domain.bo.ContractualTaskSupplementBo;
import org.dromara.productManagement.domain.vo.ContractualTaskSupplementVo;
import org.dromara.productManagement.mapper.ContractualTaskSupplementMapper;
import org.dromara.productManagement.service.IContractualTaskSupplementService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 合同任务额外字段
Service业务层处理
*
* @author Lion Li
* @date 2025-01-21
*/
@RequiredArgsConstructor
@Service
public class ContractualTaskSupplementServiceImpl implements IContractualTaskSupplementService {
private final ContractualTaskSupplementMapper baseMapper;
/**
* 查询合同任务额外字段
*
* @param id 主键
* @return 合同任务额外字段
*/
@Override
public ContractualTaskSupplementVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询合同任务额外字段
列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同任务额外字段
分页列表
*/
@Override
public TableDataInfo<ContractualTaskSupplementVo> queryPageList(ContractualTaskSupplementBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ContractualTaskSupplement> lqw = buildQueryWrapper(bo);
Page<ContractualTaskSupplementVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的合同任务额外字段
列表
*
* @param bo 查询条件
* @return 合同任务额外字段
列表
*/
@Override
public List<ContractualTaskSupplementVo> queryList(ContractualTaskSupplementBo bo) {
LambdaQueryWrapper<ContractualTaskSupplement> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ContractualTaskSupplement> buildQueryWrapper(ContractualTaskSupplementBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ContractualTaskSupplement> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getDocumentTasksId() != null, ContractualTaskSupplement::getDocumentTasksId, bo.getDocumentTasksId());
lqw.eq(StringUtils.isNotBlank(bo.getContractPartyRole()), ContractualTaskSupplement::getContractPartyRole, bo.getContractPartyRole());
return lqw;
}
/**
* 新增合同任务额外字段
*
* @param bo 合同任务额外字段
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(ContractualTaskSupplementBo bo) {
ContractualTaskSupplement add = MapstructUtils.convert(bo, ContractualTaskSupplement.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改合同任务额外字段
*
* @param bo 合同任务额外字段
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(ContractualTaskSupplementBo bo) {
ContractualTaskSupplement update = MapstructUtils.convert(bo, ContractualTaskSupplement.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ContractualTaskSupplement entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除合同任务额外字段
信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public String queryContractPartyRole(String id) {
LambdaQueryWrapper<ContractualTaskSupplement> lqw = Wrappers.lambdaQuery();
lqw.eq(ContractualTaskSupplement::getDocumentTasksId, id);
ContractualTaskSupplement contractualTaskSupplement = baseMapper.selectOne(lqw);
if (contractualTaskSupplement == null) {
return null;
}
return contractualTaskSupplement.getContractPartyRole();
}
}

161
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java

@ -1,6 +1,9 @@
package org.dromara.productManagement.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -8,24 +11,19 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.productManagement.common.service.BaseTaskService;
import org.dromara.productManagement.common.service.AbstractTaskProcessor;
import org.dromara.productManagement.domain.*;
import org.dromara.productManagement.domain.bo.ContractualTaskSupplementBo;
import org.dromara.productManagement.domain.bo.DocumentTasksBo;
import org.dromara.productManagement.domain.vo.ContractualTasksVo;
import org.dromara.productManagement.domain.vo.DocumentTasksVo;
import org.dromara.productManagement.enums.TaskEnum;
import org.dromara.productManagement.mapper.DocumentTasksMapper;
import org.dromara.productManagement.mapper.ContractualTasksMapper;
import org.dromara.productManagement.mapper.DocumentTasksPermissionsMapper;
import org.dromara.productManagement.mapper.ModelPromptsMapper;
import org.dromara.productManagement.mapper.ModelUserPromptssettingMapper;
import org.dromara.productManagement.service.IContractualTaskSupplementService;
import org.dromara.productManagement.service.IDocumentTasksPermissionsService;
import org.dromara.productManagement.service.IDocumentTasksService;
import org.dromara.productManagement.utils.MyTimeUtils;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.productManagement.domain.bo.ContractualTasksBo;
@ -44,24 +42,20 @@ import java.util.*;
@Service
@Transactional
public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTasksBo> implements IContractualTasksService {
public ContractualTasksServiceImpl(ISysOssService ossService, ISysUserService userService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService, DocumentTasksMapper baseMapper) {
super(ossService, userService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService, baseMapper);
}
public class ContractualTasksServiceImpl extends AbstractTaskProcessor<ContractualTasksBo, ContractualTasks> implements IContractualTasksService {
@Autowired
private DocumentTasksMapper documentTasksMapper;
private ContractualTasksMapper baseMapper;
@Autowired
private IDocumentTasksService documentTasksService;
@Autowired
private IContractualTaskSupplementService contractualTaskSupplementService;
private ISysUserService userService;
public ContractualTasksServiceImpl(ISysOssService ossService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService) {
super(ossService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService);
}
@Override
public DocumentTasksVo queryById(Long id) {
return null;
public ContractualTasksVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
/**
@ -73,29 +67,21 @@ public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTask
*/
@Override
public TableDataInfo<ContractualTasksVo> queryPageList(ContractualTasksBo bo, PageQuery pageQuery) {
DocumentTasksBo documentTasksBo = new DocumentTasksBo();
BeanUtils.copyProperties(bo, documentTasksBo);
LambdaQueryWrapper<DocumentTasks> lqw = buildQueryWrapper(documentTasksBo);
lqw.eq(DocumentTasks::getTaskType, TaskEnum.TaskType.CONTRACT_REVIEW.getValue());
LambdaQueryWrapper<ContractualTasks> lqw = buildQueryWrapper(bo);
// 获取 DocumentTasksVo 的分页结果
Page<DocumentTasksVo> documentTasksPage = documentTasksMapper.selectVoPage(pageQuery.build(), lqw);
IPage<ContractualTasksVo> contractualTasksVoIPage = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 创建新的 ContractualTasksVo 的 Page 对象
Page<ContractualTasksVo> result = new Page<>();
// 复制分页信息
result.setTotal(documentTasksPage.getTotal());
result.setSize(documentTasksPage.getSize());
result.setCurrent(documentTasksPage.getCurrent());
result.setTotal(contractualTasksVoIPage.getTotal());
result.setSize(contractualTasksVoIPage.getSize());
result.setCurrent(contractualTasksVoIPage.getCurrent());
// 转换记录列表
List<ContractualTasksVo> contractualTasksVoList = documentTasksPage.getRecords().stream()
.map(documentTasksVo -> {
ContractualTasksVo contractualTasksVo = new ContractualTasksVo();
BeanUtils.copyProperties(documentTasksVo, contractualTasksVo);
List<ContractualTasksVo> contractualTasksVoList = contractualTasksVoIPage.getRecords().stream()
.map(contractualTasksVo -> {
//查询合同角色
String contractPartyRole = contractualTaskSupplementService.queryContractPartyRole(documentTasksVo.getId());
contractualTasksVo.setContractPartyRole(contractPartyRole);
// 设置创建用户信息
Long createBy = contractualTasksVo.getCreateBy();
contractualTasksVo.setCreateUser(userService.selectUserById(createBy).getNickName());
@ -127,27 +113,16 @@ public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTask
* @return 合同任务列表
*/
@Override
public List<DocumentTasksVo> queryList(ContractualTasksBo bo) {
DocumentTasksBo documentTasksBo = new DocumentTasksBo();
BeanUtils.copyProperties(bo, documentTasksBo);
return documentTasksService.queryList(documentTasksBo);
}
// private LambdaQueryWrapper<DocumentTasks> buildQueryWrapper(DocumentTasksBo bo) {
// LambdaQueryWrapper<DocumentTasks> lqw = Wrappers.lambdaQuery();
// lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), DocumentTasks::getTaskIndustry, bo.getTaskIndustry());
// lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), DocumentTasks::getTaskRegion, bo.getTaskRegion());
// lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), DocumentTasks::getDocumentName, bo.getDocumentName());
// lqw.eq(StringUtils.isNotBlank(bo.getProgressStatus()), DocumentTasks::getProgressStatus, bo.getProgressStatus());
// List<String> taskNames = bo.getTaskNameList();
// lqw.eq(DocumentTasks::getTaskType, TaskEnum.TaskType.CONTRACT_REVIEW.getValue());
// if (taskNames != null && !taskNames.isEmpty()) {
// lqw.in(DocumentTasks::getTaskName, taskNames);
// }
// lqw.orderByDesc(DocumentTasks::getCreateTime);
// return lqw;
// }
public List<ContractualTasksVo> queryList(ContractualTasksBo bo) {
LambdaQueryWrapper<ContractualTasks> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
protected LambdaQueryWrapper<ContractualTasks> buildQueryWrapper(ContractualTasksBo bo) {
LambdaQueryWrapper<ContractualTasks> lqw = Wrappers.lambdaQuery();
lqw.eq(ContractualTasks::getTaskType, TaskEnum.TaskType.CONTRACT_REVIEW.getValue());
return lqw;
}
/**
* 新增合同任务
@ -157,7 +132,7 @@ public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTask
*/
@Override
public Boolean insertByBo(ContractualTasksBo bo) throws IOException, InterruptedException {
return handleTask(bo, TaskEnum.TaskType.CONTRACT_REVIEW.getValue());
return processTask(bo, TaskEnum.TaskType.CONTRACT_REVIEW.getValue());
}
/**
@ -168,18 +143,10 @@ public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTask
*/
@Override
public Boolean updateByBo(ContractualTasksBo bo) {
DocumentTasks update = MapstructUtils.convert(bo, DocumentTasks.class);
// validEntityBeforeSave(update);
ContractualTasks update = MapstructUtils.convert(bo, ContractualTasks.class);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ContractualTasks entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除合同任务信息
*
@ -192,17 +159,65 @@ public class ContractualTasksServiceImpl extends BaseTaskService<ContractualTask
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public Map<String, Object> getContractBaseInfo(String ossId) {
// 检查参数
if (ossId == null || ossId.isEmpty()) {
throw new RuntimeException("无效的OSS ID");
}
Map<String, Object> result = new HashMap<>();
try {
// 1. 获取文件路径
String filePath = "/path/to/contract/documents/" + ossId + ".pdf";
result.put("filePath", filePath);
// 2. 获取基本文件信息 (这里可以调用OSS服务获取更多信息)
result.put("fileName", "合同文件-" + ossId);
// 3. 解析合同基本信息 (实际项目中可能需要调用专门的服务来分析)
// 示例数据,实际项目中应该来自真实分析结果
result.put("partyA", "企查查科技股份有限公司");
result.put("partyB", "北京柒腾科技股份有限公司");
result.put("contractType", "保密协议");
result.put("signDate", "2023-10-01");
// 4. 可以添加其他需要的信息
return result;
} catch (Exception e) {
e.printStackTrace();
// 返回包含错误信息的结果
result.put("error", e.getMessage());
return result;
}
}
@Override
public ContractualTasks convertToTaskEntity(
ContractualTasksBo taskData, String taskName, String fileName, String taskType) {
ContractualTasks entity = MapstructUtils.convert(taskData, ContractualTasks.class);
entity.setTaskName(taskName);
entity.setDocumentName(fileName);
entity.setProgressStatus("PENDING");
entity.setTaskType(taskType);
entity.setContractPartyRole(taskData.getContractPartyRole());
return entity;
}
@Override
public boolean saveTaskEntity(ContractualTasks entity) {
return baseMapper.insert(entity) > 0;
}
@Override
protected void beforeTaskMessageSent(Long taskId, String taskName,ContractualTasksBo bo) {
String contractPartyRole = bo.getContractPartyRole();
ContractualTaskSupplementBo contractualTaskSupplementBo = new ContractualTaskSupplementBo();
contractualTaskSupplementBo.setDocumentTasksId(taskId);
contractualTaskSupplementBo.setContractPartyRole(contractPartyRole);
contractualTaskSupplementService.insertByBo(contractualTaskSupplementBo);
public Long getTaskId(ContractualTasks entity) {
return entity.getId();
}
}

86
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java

@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.io.FileUtil;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import okhttp3.*;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.MapstructUtils;
@ -14,18 +15,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.dromara.productManagement.common.service.BaseTaskService;
import org.dromara.productManagement.common.service.AbstractTaskProcessor;
import org.dromara.productManagement.domain.*;
import org.dromara.productManagement.domain.bo.BaseTaskBo;
;
import org.dromara.productManagement.enums.TaskEnum;
import org.dromara.productManagement.mapper.*;
import org.dromara.productManagement.service.IDocumentTasksPermissionsService;
import org.dromara.productManagement.utils.MyHttpUtils;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.dromara.productManagement.domain.bo.DocumentTasksBo;
import org.dromara.productManagement.domain.vo.DocumentTasksVo;
@ -49,11 +50,23 @@ import java.util.Collection;
*/
@Service
@Transactional
public class DocumentTasksServiceImpl extends BaseTaskService implements IDocumentTasksService {
public class DocumentTasksServiceImpl extends AbstractTaskProcessor<DocumentTasksBo, DocumentTasks> implements IDocumentTasksService {
@Autowired
private DocumentTasksMapper baseMapper;
@Autowired
private ISysUserService userService;
@Autowired
private ISysOssService ossService;
@Value("${chat.chatUrl}")
private String chatUrl;
@Value("${chat.tempfilePath}")
private String tempfilePath;
public DocumentTasksServiceImpl(ISysOssService ossService, ISysUserService userService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService, DocumentTasksMapper baseMapper) {
super(ossService, userService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService, baseMapper);
public DocumentTasksServiceImpl(ISysOssService ossService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService) {
super(ossService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService);
}
/**
@ -64,7 +77,7 @@ public class DocumentTasksServiceImpl extends BaseTaskService implements IDocume
*/
@Override
public DocumentTasksVo queryById(Long id){
return super.queryById(id);
return baseMapper.selectVoById(id);
}
/**
@ -110,8 +123,9 @@ public class DocumentTasksServiceImpl extends BaseTaskService implements IDocume
LambdaQueryWrapper<DocumentTasks> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
@Override
protected LambdaQueryWrapper<DocumentTasks> buildQueryWrapper(DocumentTasksBo bo) {
public LambdaQueryWrapper<DocumentTasks> buildQueryWrapper(DocumentTasksBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<DocumentTasks> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getTaskName()), DocumentTasks::getTaskName, bo.getTaskName());
@ -141,7 +155,7 @@ public class DocumentTasksServiceImpl extends BaseTaskService implements IDocume
@Override
@Transactional
public Boolean insertByBo(DocumentTasksBo bo) throws IOException, InterruptedException {
return handleTask(bo, TaskEnum.TaskType.SCHEME_REVIEW.getValue());
return processTask(bo, TaskEnum.TaskType.SCHEME_REVIEW.getValue());
}
/**
@ -220,6 +234,7 @@ public class DocumentTasksServiceImpl extends BaseTaskService implements IDocume
}
return 0;
}
@Override
public SysOssVo uploadFile(MultipartFile file) throws IOException, InterruptedException {
String destDir = tempfilePath;
@ -252,35 +267,32 @@ public class DocumentTasksServiceImpl extends BaseTaskService implements IDocume
destPath = destPath.substring(0, destPath.lastIndexOf(".")) + ".docx";
}
}
//校验文件是否可用
if(!MyHttpUtils.sendFileCheckMessage(chatUrl + "/back/checkFile", destPath)){
throw new RuntimeException("文件无法正常打开。可以尝试用WORD或WPS打开文件,进行修复并另存,用另存的文件再做一次尝试。");
}
// //校验文件是否可用
// if(!MyHttpUtils.sendFileCheckMessage(chatUrl + "/back/checkFile", destPath)){
// throw new RuntimeException("文件无法正常打开。可以尝试用WORD或WPS打开文件,进行修复并另存,用另存的文件再做一次尝试。");
// }
SysOssVo upload = ossService.upload(new File(destPath));
return upload;
}
// @Override
// protected Boolean processTaskItems(List<String> taskNames, BaseTaskBo bo, FileProcessResult fileResult, String taskType) {
// boolean flag = false;
// for (String taskName : taskNames) {
// DocumentTasks add = MapstructUtils.convert(bo, DocumentTasks.class);
// add.setTaskName(taskName);
// add.setDocumentName(fileResult.getFileName());
// add.setProgressStatus("PENDING");
// add.setTaskType(taskType);
//
// flag = baseMapper.insert(add) > 0;
//
// Long priority = calculatePriority(taskName);
// MyHttpUtils.sendTaskStartMessage(chatUrl + "/back/taskStart",
// add.getId(), taskName, fileResult.getFilePath(), priority);
//
// if (!flag) {
// throw new RuntimeException("新增文档任务失败");
// }
// }
// return flag;
//
// }
@Override
public DocumentTasks convertToTaskEntity(
DocumentTasksBo taskData, String taskName, String fileName, String taskType) {
DocumentTasks entity = MapstructUtils.convert(taskData, DocumentTasks.class);
entity.setTaskName(taskName);
entity.setDocumentName(fileName);
entity.setProgressStatus("PENDING");
entity.setTaskType(taskType);
return entity;
}
@Override
public boolean saveTaskEntity(DocumentTasks entity) {
return baseMapper.insert(entity) > 0;
}
@Override
public Long getTaskId(DocumentTasks entity) {
return entity.getId();
}
}

119
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/TenderTaskServiceImpl.java

@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.productManagement.common.service.BaseTaskService;
import org.dromara.productManagement.common.service.AbstractTaskProcessor;
import org.dromara.productManagement.domain.DocumentTasks;
import org.dromara.productManagement.domain.TenderTask;
import org.dromara.productManagement.domain.bo.ContractualTasksBo;
@ -41,19 +41,22 @@ import java.util.Collection;
* @author Lion Li
* @date 2024-12-31
*/
@Transactional
@Service
public class TenderTaskServiceImpl extends BaseTaskService implements ITenderTaskService {
public TenderTaskServiceImpl(ISysOssService ossService, ISysUserService userService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService, DocumentTasksMapper baseMapper) {
super(ossService, userService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService, baseMapper);
}
@Transactional
public class TenderTaskServiceImpl extends AbstractTaskProcessor<TenderTaskBo, TenderTask> implements ITenderTaskService {
@Autowired
private TenderTaskMapper baseMapper;
@Autowired
private DocumentTasksMapper documentTasksMapper;
@Autowired
private ISysUserService userService;
@Autowired
private IDocumentTasksService documentTasksService;
public TenderTaskServiceImpl(ISysOssService ossService, ModelPromptsMapper modelPromptsMapper, ModelUserPromptssettingMapper modelUserPromptssettingMapper, DocumentTasksPermissionsMapper documentTasksPermissionsMapper, IDocumentTasksPermissionsService documentTasksPermissionsService, DictService dictTypeService) {
super(ossService, modelPromptsMapper, modelUserPromptssettingMapper, documentTasksPermissionsMapper, documentTasksPermissionsService, dictTypeService);
}
/**
* 查询招标摘要任务
*
@ -62,8 +65,10 @@ public class TenderTaskServiceImpl extends BaseTaskService implements ITenderTa
*/
@Override
public DocumentTasksVo queryById(Long id) {
return null;
// 由于接口要求返回DocumentTasksVo,这里需要进行转换
return documentTasksMapper.selectVoById(id);
}
/**
* 分页查询招标摘要任务列表
*
@ -78,17 +83,18 @@ public class TenderTaskServiceImpl extends BaseTaskService implements ITenderTa
LambdaQueryWrapper<DocumentTasks> lqw = buildQueryWrapper(documentTasksBo);
lqw.eq(DocumentTasks::getTaskType, TaskEnum.TaskType.TENDER_REVIEW.getValue());
Page<DocumentTasksVo> result = documentTasksMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(vo -> {
Long createBy = vo.getCreateBy();
vo.setCreateUser(userService.selectUserById(createBy).getNickName());
//计算updateTime 和 createTime之间相差的小时数
// 格式化输出
String formattedDuration="";
if(!vo.getProgressStatus().equals("PENDING")&&!vo.getProgressStatus().equals("STARTED")){
formattedDuration= MyTimeUtils.formatTimeDifference(vo.getCreateTime(), vo.getUpdateTime());
// 计算任务持续时间
String formattedDuration = "";
if (!vo.getProgressStatus().equals("PENDING") && !vo.getProgressStatus().equals("STARTED")) {
formattedDuration = MyTimeUtils.formatTimeDifference(vo.getCreateTime(), vo.getUpdateTime());
}
vo.setTaskDuration(formattedDuration);
});
return TableDataInfo.build(result);
}
@ -102,19 +108,20 @@ public class TenderTaskServiceImpl extends BaseTaskService implements ITenderTa
public List<DocumentTasksVo> queryList(TenderTaskBo bo) {
DocumentTasksBo documentTasksBo = new DocumentTasksBo();
BeanUtils.copyProperties(bo, documentTasksBo);
return documentTasksService.queryList(documentTasksBo);
}
private LambdaQueryWrapper<TenderTask> buildQueryWrapper(TenderTaskBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TenderTask> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), TenderTask::getTaskIndustry, bo.getTaskIndustry());
lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), TenderTask::getTaskRegion, bo.getTaskRegion());
lqw.like(StringUtils.isNotBlank(bo.getTaskName()), TenderTask::getTaskName, bo.getTaskName());
lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), TenderTask::getDocumentName, bo.getDocumentName());
lqw.eq(bo.getOssId() != null, TenderTask::getOssId, bo.getOssId());
lqw.eq(StringUtils.isNotBlank(bo.getProgressStatus()), TenderTask::getProgressStatus, bo.getProgressStatus());
private LambdaQueryWrapper<DocumentTasks> buildQueryWrapper(DocumentTasksBo bo) {
LambdaQueryWrapper<DocumentTasks> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), DocumentTasks::getTaskIndustry, bo.getTaskIndustry());
lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), DocumentTasks::getTaskRegion, bo.getTaskRegion());
lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), DocumentTasks::getDocumentName, bo.getDocumentName());
lqw.eq(StringUtils.isNotBlank(bo.getProgressStatus()), DocumentTasks::getProgressStatus, bo.getProgressStatus());
List<String> taskNames = bo.getTaskNameList();
if (taskNames != null && !taskNames.isEmpty()) {
lqw.in(DocumentTasks::getTaskName, taskNames);
}
lqw.orderByDesc(DocumentTasks::getCreateTime);
return lqw;
}
@ -122,45 +129,75 @@ public class TenderTaskServiceImpl extends BaseTaskService implements ITenderTa
* 新增招标摘要任务
*
* @param bo 招标摘要任务
* @return 是否新增成功
* @return 结果
*/
@Override
public Boolean insertByBo(TenderTaskBo bo) throws IOException, InterruptedException {
return handleTask(bo, TaskEnum.TaskType.TENDER_REVIEW.getValue());
return processTask(bo, TaskEnum.TaskType.TENDER_REVIEW.getValue());
}
/**
* 修改招标摘要任务
*
* @param bo 招标摘要任务
* @return 是否修改成功
* @return 结果
*/
@Override
public Boolean updateByBo(TenderTaskBo bo) {
TenderTask update = MapstructUtils.convert(bo, TenderTask.class);
validEntityBeforeSave(update);
return null;
return baseMapper.updateById(update) > 0;
}
/**
* 批量删除招标摘要任务
*
* @param ids 需要删除的招标摘要任务主键
* @return 结果
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
// TODO 做一些业务上的校验,判断是否可以删除
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 保存前的数据校验
* 将任务数据转换为任务实体
*/
private void validEntityBeforeSave(TenderTask entity){
//TODO 做一些数据校验,如唯一约束
@Override
public TenderTask convertToTaskEntity(
TenderTaskBo taskData, String taskName, String fileName, String taskType) {
TenderTask entity = MapstructUtils.convert(taskData, TenderTask.class);
entity.setTaskName(taskName);
entity.setDocumentName(fileName);
entity.setProgressStatus("PENDING");
entity.setTaskType(taskType);
return entity;
}
/**
* 校验并批量删除招标摘要任务信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
* 保存任务实体到数据库
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
public boolean saveTaskEntity(TenderTask entity) {
return baseMapper.insert(entity) > 0;
}
return baseMapper.deleteByIds(ids) > 0;
/**
* 获取任务ID
*/
@Override
public Long getTaskId(TenderTask entity) {
return entity.getId();
}
/**
* 任务插入数据库前的扩展点
*/
@Override
public void beforeTaskInsert(TenderTaskBo taskData, String taskName, FileProcessResult fileResult) {
// 招标任务特定的前置处理逻辑
System.out.println("准备插入招标任务: " + taskName);
}
}

47
zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java

@ -1,5 +1,7 @@
package org.dromara.productManagement.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.productManagement.domain.vo.DocumentTasksVo;
@ -9,6 +11,8 @@ import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class MyHttpUtils {
// chatUrl 应该是静态字段,因为它在静态方法中使用
@ -74,4 +78,47 @@ public class MyHttpUtils {
}
return false;
}
/**
* 发起同步请求并等待返回结果
* @param url 请求地址
* @param params 请求参数
* @return 请求返回的结果Map
*/
public static Map<String, Object> sendSyncRequest(String url, Map<String, String> params) {
OkHttpClient client = new OkHttpClient.Builder().build();
// 构建URL
HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
// 添加请求参数
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
}
}
Request request = new Request.Builder()
.url(urlBuilder.build())
.get()
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("请求失败: " + response);
}
if (response.body() != null) {
String jsonString = response.body().string();
// 使用Jackson将JSON字符串转换为Map
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
} else {
return new HashMap<>();
}
} catch (IOException e) {
e.printStackTrace();
return new HashMap<>();
}
}
}

39
zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualTaskChecklistMapper.xml

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.productManagement.mapper.ContractualTaskChecklistMapper">
<select id="selectGroupPage" resultType="org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo">
SELECT
name,
group_id as groupId,
COUNT(*) as checklistItemNum
FROM contractual_task_checklist
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
GROUP BY name, group_id
</select>
<select id="selectGroupList" resultType="org.dromara.productManagement.domain.vo.ContractualTaskChecklistVo">
SELECT
name,
group_id as groupId,
COUNT(*) as checklistItemNum
FROM contractual_task_checklist
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
GROUP BY name, group_id
</select>
<delete id="realDelete">
DELETE FROM contractual_task_checklist WHERE group_id = #{groupId}
</delete>
</mapper>

7
zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualTaskSupplementMapper.xml

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.productManagement.mapper.ContractualTaskSupplementMapper">
</mapper>
Loading…
Cancel
Save