Commit da5a7be2 authored by alex yao's avatar alex yao

feat: 新增合同对比接口

parent 85628679
......@@ -16,6 +16,7 @@ public interface ContractConstants {
public interface ContractType{
final static String contractExtract = "ContractExtract"; //审查
final static String contractReview = "ContractReview"; //对比
final static String contractTextdiff = "ContractTextdiff"; //对比
}
......
......@@ -18,79 +18,100 @@ import java.io.Serializable;
public class BizExtractionReviewTaskModel extends BaseModelClass implements Serializable {
private static final long serialVersionUID = 1L;
/** id
*
*/
/**
* id
*/
private Integer id;
@Column(name = "id",length = 10)
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId(){
@Column(name = "id", length = 10)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return this.id;
}
public void setId(Integer id){
public void setId(Integer id) {
this.id = id;
super.addValidField("id");
}
/** task_id
*审查任务
*/
/**
* task_id
* 审查任务
*/
private String taskId;
@Column(name = "task_id",length = 100)
public String getTaskId(){
@Column(name = "task_id", length = 100)
public String getTaskId() {
return this.taskId;
}
public void setTaskId(String taskId){
public void setTaskId(String taskId) {
this.taskId = taskId;
super.addValidField("taskId");
}
/** file_url
*文件地址
*/
/**
* user_id
* 用户ID
*/
private Long userId;
@Column(name = "user_id")
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
super.addValidField("userId");
}
/**
* file_url
* 文件地址
*/
private String fileUrl;
@Column(name = "file_url",length = 120)
public String getFileUrl(){
@Column(name = "file_url", length = 120)
public String getFileUrl() {
return this.fileUrl;
}
public void setFileUrl(String fileUrl){
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
super.addValidField("fileUrl");
}
/** file_name
*文件名
*/
/**
* file_name
* 文件名
*/
private String fileName;
@Column(name = "file_name",length = 100)
public String getFileName(){
@Column(name = "file_name", length = 100)
public String getFileName() {
return this.fileName;
}
public void setFileName(String fileName){
public void setFileName(String fileName) {
this.fileName = fileName;
super.addValidField("fileName");
}
/** actionType
*执行动作(审查,提取,对比)
*/
/**
* actionType
* 执行动作(审查,提取,对比)
*/
private String actionType;
@Column(name = "action_type",length = 100)
@Column(name = "action_type", length = 100)
public String getActionType() {
return actionType;
}
......@@ -101,165 +122,175 @@ public class BizExtractionReviewTaskModel extends BaseModelClass implements Seri
}
/** review_status
*审核状态 RUN-审核中 END-已完成 FAIL-审核失败
*/
/**
* review_status
* 审核状态 RUN-审核中 END-已完成 FAIL-审核失败
*/
private String reviewStatus;
@Column(name = "review_status",length = 10)
public String getReviewStatus(){
@Column(name = "review_status", length = 10)
public String getReviewStatus() {
return this.reviewStatus;
}
public void setReviewStatus(String reviewStatus){
public void setReviewStatus(String reviewStatus) {
this.reviewStatus = reviewStatus;
super.addValidField("reviewStatus");
}
/** review_error_msg
*审核异常消息
*/
/**
* review_error_msg
* 审核异常消息
*/
private String reviewErrorMsg;
@Column(name = "review_error_msg",length = 300)
public String getReviewErrorMsg(){
@Column(name = "review_error_msg", length = 300)
public String getReviewErrorMsg() {
return this.reviewErrorMsg;
}
public void setReviewErrorMsg(String reviewErrorMsg){
public void setReviewErrorMsg(String reviewErrorMsg) {
this.reviewErrorMsg = reviewErrorMsg;
super.addValidField("reviewErrorMsg");
}
/** text_in_task_id
*textIn的task_id
*/
/**
* text_in_task_id
* textIn的task_id
*/
private String textInTaskId;
@Column(name = "text_in_task_id",length = 120)
public String getTextInTaskId(){
@Column(name = "text_in_task_id", length = 120)
public String getTextInTaskId() {
return this.textInTaskId;
}
public void setTextInTaskId(String textInTaskId){
public void setTextInTaskId(String textInTaskId) {
this.textInTaskId = textInTaskId;
super.addValidField("textInTaskId");
}
/** contract_type
*合同类型
*/
/**
* contract_type
* 合同类型
*/
private String contractType;
@Column(name = "contract_type",length = 100)
public String getContractType(){
@Column(name = "contract_type", length = 100)
public String getContractType() {
return this.contractType;
}
public void setContractType(String contractType){
public void setContractType(String contractType) {
this.contractType = contractType;
super.addValidField("contractType");
}
/** is_deleted
*是否删除 1、Y 是 2、N 否
*/
/**
* is_deleted
* 是否删除 1、Y 是 2、N 否
*/
private String isDeleted;
@Column(name = "is_deleted",length = 1)
public String getIsDeleted(){
@Column(name = "is_deleted", length = 1)
public String getIsDeleted() {
return this.isDeleted;
}
public void setIsDeleted(String isDeleted){
public void setIsDeleted(String isDeleted) {
this.isDeleted = isDeleted;
super.addValidField("isDeleted");
}
/** CREATOR
*创建人
*/
/**
* CREATOR
* 创建人
*/
private String creator;
@Column(name = "CREATOR",length = 225)
public String getCreator(){
@Column(name = "CREATOR", length = 225)
public String getCreator() {
return this.creator;
}
public void setCreator(String creator){
public void setCreator(String creator) {
this.creator = creator;
super.addValidField("creator");
}
/** CREATED_TIME
*创建时间
*/
/**
* CREATED_TIME
* 创建时间
*/
private java.util.Date createdTime;
@Column(name = "CREATED_TIME",length = 19)
public java.util.Date getCreatedTime(){
@Column(name = "CREATED_TIME", length = 19)
public java.util.Date getCreatedTime() {
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
public void setCreatedTime(java.util.Date createdTime) {
this.createdTime = createdTime;
super.addValidField("createdTime");
}
/** MODIFIER
*修改人
*/
/**
* MODIFIER
* 修改人
*/
private String modifier;
@Column(name = "MODIFIER",length = 225)
public String getModifier(){
@Column(name = "MODIFIER", length = 225)
public String getModifier() {
return this.modifier;
}
public void setModifier(String modifier){
public void setModifier(String modifier) {
this.modifier = modifier;
super.addValidField("modifier");
}
/** MODIFIED_TIME
*修改时间
*/
/**
* MODIFIED_TIME
* 修改时间
*/
private java.util.Date modifiedTime;
@Column(name = "MODIFIED_TIME",length = 19)
public java.util.Date getModifiedTime(){
@Column(name = "MODIFIED_TIME", length = 19)
public java.util.Date getModifiedTime() {
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
public void setModifiedTime(java.util.Date modifiedTime) {
this.modifiedTime = modifiedTime;
super.addValidField("modifiedTime");
}
/** SYS_VERSION
*乐观锁,版本号
*/
/**
* SYS_VERSION
* 乐观锁,版本号
*/
private Integer sysVersion;
@Column(name = "SYS_VERSION",length = 10)
@Version
public Integer getSysVersion(){
@Column(name = "SYS_VERSION", length = 10)
@Version
public Integer getSysVersion() {
return this.sysVersion;
}
public void setSysVersion(Integer sysVersion){
public void setSysVersion(Integer sysVersion) {
this.sysVersion = sysVersion;
super.addValidField("sysVersion");
}
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ import org.springframework.web.multipart.MultipartFile;
* @author alex.yao
* @date 2025/6/25
*/
@Permission(Access.Anonymous)
@Permission(Access.Safety)
public interface TextDiffRest extends BaseRest {
/**
......@@ -46,7 +46,7 @@ public interface TextDiffRest extends BaseRest {
/**
* 查询任务状态
*/
String queryTextDiffTask(@RequestParam String taskId);
String queryTextDiffTask(@RequestParam String taskId) throws Exception;
}
package cn.com.poc.covenant.rest.impl;
import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.FileUtils;
import cn.com.poc.covenant.rest.TextDiffRest;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
import cn.com.poc.thirdparty.resource.baidu.service.BaiduTextDiffService;
import cn.com.yict.framemax.core.exception.BusinessException;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
......@@ -24,14 +27,22 @@ public class TextDiffRestImpl implements TextDiffRest {
public String textDiff(MultipartFile baseFile, MultipartFile compareFile) {
Assert.notNull(baseFile, "Base file cannot be null");
Assert.notNull(compareFile, "Compare file cannot be null");
return baiduTextDiffService.textDiff(baseFile, compareFile, null);
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
if (userBaseEntity != null) {
throw new BusinessException("用户未登录");
}
return baiduTextDiffService.textDiff(baseFile, compareFile, null, userBaseEntity.getUserId());
}
@Override
public String textDiffByUrl(String baseFileUrl, String compareFileUrl) {
Assert.notNull(baseFileUrl, "Base file cannot be null");
Assert.notNull(compareFileUrl, "Compare file cannot be null");
return baiduTextDiffService.textDiff(baseFileUrl, compareFileUrl, null);
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
if (userBaseEntity != null) {
throw new BusinessException("用户未登录");
}
return baiduTextDiffService.textDiff(baseFileUrl, compareFileUrl, null, userBaseEntity.getUserId());
}
@Override
......@@ -41,9 +52,8 @@ public class TextDiffRestImpl implements TextDiffRest {
}
@Override
public String queryTextDiffTask(String taskId) {
public String queryTextDiffTask(String taskId) throws Exception {
Assert.notBlank(taskId, "Task ID cannot be blank");
BaiduTextDiffQueryResult baiduTextDiffQueryResult = baiduTextDiffService.queryTextDiffTask(taskId);
return baiduTextDiffQueryResult.getResult().getStatus();
return baiduTextDiffService.queryTextDiffTask(taskId);
}
}
package cn.com.poc.covenant.scheduler;
import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.covenant.constants.ContractConstants;
import cn.com.poc.covenant.model.BizExtractionReviewTaskModel;
import cn.com.poc.covenant.service.BizExtractionReviewTaskService;
import cn.com.poc.thirdparty.resource.baidu.api.BaiduTokenAPI;
import cn.com.poc.thirdparty.resource.baidu.api.TextReviewApi;
import cn.com.poc.thirdparty.resource.baidu.entity.response.TextReviewResultQueryResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
import cn.com.poc.thirdparty.resource.baidu.service.BaiduTextDiffService;
import cn.com.poc.thirdparty.resource.text_in.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity.ExtractionResult;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
......@@ -35,6 +38,9 @@ public class ExtractionReviewScheduler {
@Resource
private BaiduTokenAPI baiduTokenAPI;
@Resource
private BaiduTextDiffService baiduTextDiffService;
@Scheduled(cron = "0 0/1 * * * ?")
public void extraction() throws Exception {
// 执行任务
......@@ -70,7 +76,7 @@ public class ExtractionReviewScheduler {
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textreview);
bizExtractionReviewTaskModel.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizExtractionReviewTaskModel> models = bizExtractionReviewTaskService.findByExample(bizExtractionReviewTaskModel, null);
if (CollectionUtils.isNotEmpty(models)) {
if (CollectionUtils.isNotEmpty(models)) {
String clientId = fmxConfigService.getParam("baidu.textmind.clientId");
String clientSecret = fmxConfigService.getParam("baidu.textmind.clientSecret");
......@@ -93,4 +99,26 @@ public class ExtractionReviewScheduler {
bizExtractionReviewTaskService.saveAll(models);
}
}
/**
* 文本对比任务查询
* pending:排队中;processing:运行中;success:成功;failed:失败
*
* @throws Exception
*/
@Scheduled(cron = "0 0/1 * * * ?")
public void textDiffTaskQuery() throws Exception {
// 执行任务
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setReviewStatus("RUN");
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textdiff);
bizExtractionReviewTaskModel.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizExtractionReviewTaskModel> models = bizExtractionReviewTaskService.findByExample(bizExtractionReviewTaskModel, null);
if (CollectionUtils.isNotEmpty(models)) {
for (BizExtractionReviewTaskModel model : models) {
baiduTextDiffService.queryTextDiffTask(model.getTaskId());
}
}
}
}
package cn.com.poc.thirdparty.resource.baidu.service;
import cn.com.poc.thirdparty.resource.baidu.entity.response.BaiduTextDiffResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
/**
* @author alex.yao
* @date 2025/6/25
......@@ -20,7 +17,7 @@ public interface BaiduTextDiffService {
* @param param 参数
* @return taskId - 任务ID
*/
String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param);
String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param, Long userId);
/**
* 文档比对任务创建接口
......@@ -30,15 +27,16 @@ public interface BaiduTextDiffService {
* @param param 参数
* @return taskId - 任务ID
*/
String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param);
@Deprecated
String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param, Long userId);
/**
* 查询文档比对任务结果
*
* @param taskId 任务ID
* @return BaiduTextDiffQueryResult - 文档比对任务结果对象
* @return 文档比对任务结果
*/
BaiduTextDiffQueryResult queryTextDiffTask(String taskId);
String queryTextDiffTask(String taskId) throws Exception;
/**
* 获取前端SDK渲染
......
package cn.com.poc.thirdparty.resource.baidu.service.impl;
import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.service.BizFileUploadRecordService;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.covenant.constants.ContractConstants;
import cn.com.poc.covenant.model.BizExtractionReviewTaskModel;
import cn.com.poc.covenant.service.BizExtractionReviewTaskService;
import cn.com.poc.thirdparty.resource.baidu.api.BaiduTextDiffApi;
import cn.com.poc.thirdparty.resource.baidu.entity.response.BaiduTextDiffResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
......@@ -8,6 +13,7 @@ import cn.com.poc.thirdparty.resource.baidu.entity.result.BaiduTextDiffResult;
import cn.com.poc.thirdparty.resource.baidu.service.BaiduTextDiffService;
import cn.com.poc.thirdparty.resource.baidu.service.BaiduTokenService;
import cn.com.yict.framemax.core.exception.BusinessException;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
......@@ -15,6 +21,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
/**
* @author alex.yao
......@@ -38,22 +45,60 @@ public class BaiduTextDiffServiceImpl implements BaiduTextDiffService {
@Resource
private BaiduTokenService baiduTokenService;
@Resource
private BizFileUploadRecordService bizFileUploadRecordService;
@Resource
private BizExtractionReviewTaskService bizExtractionReviewTaskService;
@Override
public String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param) {
public String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param, Long userId) {
BaiduTextDiffResponse baiduTextDiffResponse = new BaiduTextDiffResponse();
baiduTextDiffResponse.setBaseFile(baseFile);
baiduTextDiffResponse.setCompareFile(compareFile);
baiduTextDiffResponse.setParam(param);
return createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
try {
String taskId = createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setTaskId(taskId);
bizExtractionReviewTaskModel.setFileUrl(null);
bizExtractionReviewTaskModel.setUserId(userId);
bizExtractionReviewTaskModel.setFileName(baseFile.getOriginalFilename());
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textdiff);
bizExtractionReviewTaskModel.setReviewStatus("RUN");
bizExtractionReviewTaskModel.setContractType(ContractConstants.ContractType.contractTextdiff);
bizExtractionReviewTaskService.save(bizExtractionReviewTaskModel);
return taskId;
} catch (Exception e) {
logger.error("保存任务失败", e);
throw new BusinessException("保存任务失败");
}
}
@Override
public String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param) {
public String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param, Long userId) {
BaiduTextDiffResponse baiduTextDiffResponse = new BaiduTextDiffResponse();
baiduTextDiffResponse.setBaseFileURL(baseFileUrl);
baiduTextDiffResponse.setCompareFileURL(compareFileUrl);
baiduTextDiffResponse.setParam(param);
return createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
String taskId = createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
try {
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setTaskId(taskId);
bizExtractionReviewTaskModel.setFileUrl(baseFileUrl);
bizExtractionReviewTaskModel.setUserId(userId);
bizExtractionReviewTaskModel.setFileName(bizFileUploadRecordService.getFileNameByFileUrl(baseFileUrl));
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textdiff);
bizExtractionReviewTaskModel.setReviewStatus("RUN");
bizExtractionReviewTaskModel.setContractType(ContractConstants.ContractType.contractTextdiff);
bizExtractionReviewTaskService.save(bizExtractionReviewTaskModel);
} catch (Exception e) {
logger.error("保存任务失败", e);
throw new BusinessException("保存任务失败");
}
return taskId;
}
private String createTextDiffTask(BaiduTextDiffResponse baiduTextDiffResponse, String token) {
......@@ -70,18 +115,42 @@ public class BaiduTextDiffServiceImpl implements BaiduTextDiffService {
}
@Override
public BaiduTextDiffQueryResult queryTextDiffTask(String taskId) {
String token = baiduTokenService.getToken(clientId, clientSecret);
BaiduTextDiffQueryResult baiduTextDiffQueryResult = baiduTextDiffApi.queryTask(taskId, token);
if (baiduTextDiffQueryResult == null || !baiduTextDiffQueryResult.getError_code().equals(0)) {
if (baiduTextDiffQueryResult != null
&& baiduTextDiffQueryResult.getError_code() != null
&& StringUtils.isNotBlank(baiduTextDiffQueryResult.getError_msg())) {
logger.error("查询文档对比任务,错误码:{},错误信息:{}", baiduTextDiffQueryResult.getError_code(), baiduTextDiffQueryResult.getError_msg());
public String queryTextDiffTask(String taskId) throws Exception {
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setTaskId(taskId);
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textdiff);
bizExtractionReviewTaskModel.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizExtractionReviewTaskModel> models = bizExtractionReviewTaskService.findByExample(bizExtractionReviewTaskModel, null);
if (CollectionUtils.isEmpty(models)) {
throw new BusinessException("任务不存在");
}
BizExtractionReviewTaskModel taskModel = models.get(0);
String status = StringUtils.EMPTY;
if ("RUN".equals(taskModel.getReviewStatus())) {
String token = baiduTokenService.getToken(clientId, clientSecret);
BaiduTextDiffQueryResult baiduTextDiffQueryResult = baiduTextDiffApi.queryTask(taskId, token);
if (baiduTextDiffQueryResult == null || !baiduTextDiffQueryResult.getError_code().equals(0)) {
if (baiduTextDiffQueryResult != null
&& baiduTextDiffQueryResult.getError_code() != null
&& StringUtils.isNotBlank(baiduTextDiffQueryResult.getError_msg())) {
logger.error("查询文档对比任务,错误码:{},错误信息:{}", baiduTextDiffQueryResult.getError_code(), baiduTextDiffQueryResult.getError_msg());
}
throw new BusinessException("查询文档对比任务失败");
}
if ("success".equals(baiduTextDiffQueryResult.getResult().getStatus())) {
taskModel.setReviewStatus("END");
bizExtractionReviewTaskService.save(taskModel);
status = "END";
} else if ("failed".equals(baiduTextDiffQueryResult.getResult().getStatus())) {
taskModel.setReviewStatus("FAIL");
bizExtractionReviewTaskService.save(taskModel);
status = "FAIL";
} else {
status = "RUN";
}
throw new BusinessException("查询文档对比任务失败");
}
return baiduTextDiffQueryResult;
return status;
}
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment