Commit 85628679 authored by alex yao's avatar alex yao

feat(文档对比):新增百度文档对比接口

parent 846cc766
......@@ -94,7 +94,7 @@ public class HttpUtils {
httpConn.setRequestProperty("Connection", "Keep-Alive");
httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
httpConn.setRequestProperty("Accept-Charset", "UTF-8");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httpConn.setRequestProperty("Content-Type", "multipart/form-data");
for (Map.Entry<String, String> entry : headers.entrySet()) {
httpConn.setRequestProperty(entry.getKey(), entry.getValue());
}
......
package cn.com.poc.covenant.constants;
/**
* @Author:Roger Wu
* @name:ContractConstants
* @Date:2025-05-29 17:09
*/
public interface ContractConstants {
public interface ActionType{
final static String extract = "extract"; //提取
final static String textreview = "textreview"; //审查
final static String textdiff = "textdiff"; //对比
}
public interface ContractType{
final static String contractExtract = "ContractExtract"; //审查
final static String contractReview = "ContractReview"; //对比
}
}
package cn.com.poc.covenant.dto;
import cn.com.poc.thirdparty.resource.text_in.entity.imageEdgeTriming.Result;
/**
* @author alex.yao
* @date 2025/5/19
*/
public class ExtractionDto {
private Integer status;
private Result result;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
}
package cn.com.poc.covenant.dto;
import java.util.Date;
/**
* 合同审核进度详情
*
* @author alex.yao
* @date 2025/5/21
*/
public class ReviewProgressDto {
private String reviewTaskId;//审核任务ID
private String fileName;//文件名
private String fileUrl;//文件URL
private String reviewStatus; //审核状态
private Date reviewDate;// 审核日期
private String textInTaskId; // textIn 任务id
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
public String getReviewTaskId() {
return reviewTaskId;
}
public void setReviewTaskId(String reviewTaskId) {
this.reviewTaskId = reviewTaskId;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getReviewStatus() {
return reviewStatus;
}
public void setReviewStatus(String reviewStatus) {
this.reviewStatus = reviewStatus;
}
public Date getReviewDate() {
return reviewDate;
}
public void setReviewDate(Date reviewDate) {
this.reviewDate = reviewDate;
}
public String getTextInTaskId() {
return textInTaskId;
}
public void setTextInTaskId(String textInTaskId) {
this.textInTaskId = textInTaskId;
}
}
package cn.com.poc.covenant.dto;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author alex.yao
* @date 2025/5/21
*/
public class StartReviewDto {
/**
* 文件URL列表
*/
private List<String> fileUrls;
private MultipartFile file;
/**
* 合同类型
*/
private String contractType;
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public List<String> getFileUrls() {
return fileUrls;
}
public void setFileUrls(List<String> fileUrls) {
this.fileUrls = fileUrls;
}
public String getContractType() {
return contractType;
}
public void setContractType(String contractType) {
this.contractType = contractType;
}
}
package cn.com.poc.covenant.model;
import cn.com.yict.framemax.data.model.BaseModelClass;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
/**
* Model class for biz_extraction_key_info_config
* TextIn 合同要素抽取 关键信息配置
*/
@Entity
@Table(name = "biz_extraction_key_info_config")
@DynamicInsert
@DynamicUpdate
public class BizExtractionKeyInfoConfigModel extends BaseModelClass implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private Integer id;
@Column(name = "id", length = 10)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
super.addValidField("id");
}
/**
* key_info
* 关键信息名称, 长度限制20个字符
*/
private String keyInfo;
@Column(name = "key_info", length = 20)
public String getKeyInfo() {
return this.keyInfo;
}
public void setKeyInfo(String keyInfo) {
this.keyInfo = keyInfo;
super.addValidField("keyInfo");
}
/**
* paraphrase_names
* 相似名字段,字符串数组, 可根据相似名精准抽取关键信息, 最多填写3个,每个释义名称长度限制20个字符 [array]
*/
private String paraphraseNames;
@Column(name = "paraphrase_names", length = 1073741824)
public String getParaphraseNames() {
return this.paraphraseNames;
}
public void setParaphraseNames(String paraphraseNames) {
this.paraphraseNames = paraphraseNames;
super.addValidField("paraphraseNames");
}
/**
* field_type
* 字段类型字段, 可选项有,时间:time, 金额:amount, 地址:address, 公司:company, 姓名:name, 描述(长文本):long_text_description, 其他:other, 印章:stamp, 分别对应产品段配置的字段类型
*/
private String fieldType;
@Column(name = "field_type", length = 10)
public String getFieldType() {
return this.fieldType;
}
public void setFieldType(String fieldType) {
this.fieldType = fieldType;
super.addValidField("fieldType");
}
/**
* is_in_table
* 位于表格字段, 抽取内容是否位于表格内,若不确定可不填写
*/
private String isInTable;
@Column(name = "is_in_table", length = 1)
public String getIsInTable() {
return this.isInTable;
}
public void setIsInTable(String isInTable) {
this.isInTable = isInTable;
super.addValidField("isInTable");
}
/**
* keywords
* 关键字字段, 字符串数组, 可根据关键字信息,快速定位抽取信所在段落范围, 最多填写10个,且字符总长度不超过50 [array]
*/
private String keywords;
@Column(name = "keywords", length = 1073741824)
public String getKeywords() {
return this.keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
super.addValidField("keywords");
}
/**
* 合同类型
*/
private String contractType;
@Column(name = "contract_type", length = 100)
public String getContractType() {
return contractType;
}
public void setContractType(String contractType) {
this.contractType = contractType;
super.addValidField("contractType");
}
}
\ No newline at end of file
package cn.com.poc.covenant.model;
import cn.com.yict.framemax.data.model.BaseModelClass;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
/**
* Model class for biz_extraction_review_task
* 合同审查任务
*/
@Entity
@Table(name = "biz_extraction_review_task")
@DynamicInsert
@DynamicUpdate
public class BizExtractionReviewTaskModel extends BaseModelClass implements Serializable {
private static final long serialVersionUID = 1L;
/** id
*
*/
private Integer id;
@Column(name = "id",length = 10)
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id = id;
super.addValidField("id");
}
/** task_id
*审查任务
*/
private String taskId;
@Column(name = "task_id",length = 100)
public String getTaskId(){
return this.taskId;
}
public void setTaskId(String taskId){
this.taskId = taskId;
super.addValidField("taskId");
}
/** file_url
*文件地址
*/
private String fileUrl;
@Column(name = "file_url",length = 120)
public String getFileUrl(){
return this.fileUrl;
}
public void setFileUrl(String fileUrl){
this.fileUrl = fileUrl;
super.addValidField("fileUrl");
}
/** file_name
*文件名
*/
private String fileName;
@Column(name = "file_name",length = 100)
public String getFileName(){
return this.fileName;
}
public void setFileName(String fileName){
this.fileName = fileName;
super.addValidField("fileName");
}
/** actionType
*执行动作(审查,提取,对比)
*/
private String actionType;
@Column(name = "action_type",length = 100)
public String getActionType() {
return actionType;
}
public void setActionType(String actionType) {
this.actionType = actionType;
super.addValidField("actionType");
}
/** review_status
*审核状态 RUN-审核中 END-已完成 FAIL-审核失败
*/
private String reviewStatus;
@Column(name = "review_status",length = 10)
public String getReviewStatus(){
return this.reviewStatus;
}
public void setReviewStatus(String reviewStatus){
this.reviewStatus = reviewStatus;
super.addValidField("reviewStatus");
}
/** review_error_msg
*审核异常消息
*/
private String reviewErrorMsg;
@Column(name = "review_error_msg",length = 300)
public String getReviewErrorMsg(){
return this.reviewErrorMsg;
}
public void setReviewErrorMsg(String reviewErrorMsg){
this.reviewErrorMsg = reviewErrorMsg;
super.addValidField("reviewErrorMsg");
}
/** text_in_task_id
*textIn的task_id
*/
private String textInTaskId;
@Column(name = "text_in_task_id",length = 120)
public String getTextInTaskId(){
return this.textInTaskId;
}
public void setTextInTaskId(String textInTaskId){
this.textInTaskId = textInTaskId;
super.addValidField("textInTaskId");
}
/** contract_type
*合同类型
*/
private String contractType;
@Column(name = "contract_type",length = 100)
public String getContractType(){
return this.contractType;
}
public void setContractType(String contractType){
this.contractType = contractType;
super.addValidField("contractType");
}
/** is_deleted
*是否删除 1、Y 是 2、N 否
*/
private String isDeleted;
@Column(name = "is_deleted",length = 1)
public String getIsDeleted(){
return this.isDeleted;
}
public void setIsDeleted(String isDeleted){
this.isDeleted = isDeleted;
super.addValidField("isDeleted");
}
/** CREATOR
*创建人
*/
private String creator;
@Column(name = "CREATOR",length = 225)
public String getCreator(){
return this.creator;
}
public void setCreator(String creator){
this.creator = creator;
super.addValidField("creator");
}
/** CREATED_TIME
*创建时间
*/
private java.util.Date createdTime;
@Column(name = "CREATED_TIME",length = 19)
public java.util.Date getCreatedTime(){
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
this.createdTime = createdTime;
super.addValidField("createdTime");
}
/** MODIFIER
*修改人
*/
private String modifier;
@Column(name = "MODIFIER",length = 225)
public String getModifier(){
return this.modifier;
}
public void setModifier(String modifier){
this.modifier = modifier;
super.addValidField("modifier");
}
/** MODIFIED_TIME
*修改时间
*/
private java.util.Date modifiedTime;
@Column(name = "MODIFIED_TIME",length = 19)
public java.util.Date getModifiedTime(){
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
this.modifiedTime = modifiedTime;
super.addValidField("modifiedTime");
}
/** SYS_VERSION
*乐观锁,版本号
*/
private Integer sysVersion;
@Column(name = "SYS_VERSION",length = 10)
@Version
public Integer getSysVersion(){
return this.sysVersion;
}
public void setSysVersion(Integer sysVersion){
this.sysVersion = sysVersion;
super.addValidField("sysVersion");
}
}
\ No newline at end of file
package cn.com.poc.covenant.model;
import cn.com.yict.framemax.data.model.BaseModelClass;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
/**
* Model class for biz_extreaction_contract_type
* 合同审查-合同类型
*/
@Entity
@Table(name = "biz_extreaction_contract_type")
@DynamicInsert
@DynamicUpdate
public class BizExtreactionContractTypeModel extends BaseModelClass implements Serializable {
private static final long serialVersionUID = 1L;
/** id
*
*/
private Integer id;
@Column(name = "id",length = 10)
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id = id;
super.addValidField("id");
}
/** contract_code
*合同类型-代码
*/
private String contractCode;
@Column(name = "contract_code",length = 100)
public String getContractCode(){
return this.contractCode;
}
public void setContractCode(String contractCode){
this.contractCode = contractCode;
super.addValidField("contractCode");
}
/** contract_name
*合同类型名
*/
private String contractName;
@Column(name = "contract_name",length = 100)
public String getContractName(){
return this.contractName;
}
public void setContractName(String contractName){
this.contractName = contractName;
super.addValidField("contractName");
}
/** contract_type
*合同类型名
*/
private String contractType;
@Column(name = "contract_type",length = 100)
public String getContractType() {
return contractType;
}
public void setContractType(String contractType) {
this.contractType = contractType;
super.addValidField("contractType");
}
}
\ No newline at end of file
select id,
task_id,
file_url,
file_name,
action_type,
review_status,
review_error_msg,
text_in_task_id,
contract_type,
is_deleted,
CREATOR,
CREATED_TIME,
MODIFIER,
MODIFIED_TIME
from biz_extraction_review_task
where is_deleted = 'N' <<and task_id = :taskId>>
<<and LOCATE(:search,file_name)>> <<and action_type = :actionType>>
order by CREATED_TIME desc
\ No newline at end of file
package cn.com.poc.covenant.query;
import java.io.Serializable;
/**
* Query Condition class for ExtractionTaskQuery
*/
public class ExtractionTaskQueryCondition implements Serializable {
private static final long serialVersionUID = 1L;
private String taskId;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
private String search;
public String getSearch() {
return this.search;
}
public void setSearch(String search) {
this.search = search;
}
private String actionType;
public String getActionType() {
return actionType;
}
public void setActionType(String actionType) {
this.actionType = actionType;
}
}
\ No newline at end of file
package cn.com.poc.covenant.query;
import cn.com.yict.framemax.data.model.BaseItemClass;
import javax.persistence.Column;
import javax.persistence.Entity;
import java.io.Serializable;
/**
* Query Item class for ExtractionTaskQuery
*/
@Entity
public class ExtractionTaskQueryItem extends BaseItemClass implements Serializable{
private static final long serialVersionUID = 1L;
/** id
*id
*/
private Integer id;
@Column(name = "id")
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id = id;
}
/** task_id
*task_id
*/
private String taskId;
@Column(name = "task_id")
public String getTaskId(){
return this.taskId;
}
public void setTaskId(String taskId){
this.taskId = taskId;
}
/** file_url
*file_url
*/
private String fileUrl;
@Column(name = "file_url")
public String getFileUrl(){
return this.fileUrl;
}
public void setFileUrl(String fileUrl){
this.fileUrl = fileUrl;
}
/** file_name
*file_name
*/
private String fileName;
@Column(name = "file_name")
public String getFileName(){
return this.fileName;
}
public void setFileName(String fileName){
this.fileName = fileName;
}
/** actionType
*执行动作(审查,提取,对比)
*/
private String actionType;
@Column(name = "action_type",length = 100)
public String getActionType() {
return actionType;
}
public void setActionType(String actionType) {
this.actionType = actionType;
}
/** review_status
*review_status
*/
private String reviewStatus;
@Column(name = "review_status")
public String getReviewStatus(){
return this.reviewStatus;
}
public void setReviewStatus(String reviewStatus){
this.reviewStatus = reviewStatus;
}
/** review_error_msg
*review_error_msg
*/
private String reviewErrorMsg;
@Column(name = "review_error_msg")
public String getReviewErrorMsg(){
return this.reviewErrorMsg;
}
public void setReviewErrorMsg(String reviewErrorMsg){
this.reviewErrorMsg = reviewErrorMsg;
}
/** text_in_task_id
*text_in_task_id
*/
private String textInTaskId;
@Column(name = "text_in_task_id")
public String getTextInTaskId(){
return this.textInTaskId;
}
public void setTextInTaskId(String textInTaskId){
this.textInTaskId = textInTaskId;
}
/** contract_type
*contract_type
*/
private String contractType;
@Column(name = "contract_type")
public String getContractType(){
return this.contractType;
}
public void setContractType(String contractType){
this.contractType = contractType;
}
/** is_deleted
*is_deleted
*/
private String isDeleted;
@Column(name = "is_deleted")
public String getIsDeleted(){
return this.isDeleted;
}
public void setIsDeleted(String isDeleted){
this.isDeleted = isDeleted;
}
/** CREATOR
*CREATOR
*/
private String creator;
@Column(name = "CREATOR")
public String getCreator(){
return this.creator;
}
public void setCreator(String creator){
this.creator = creator;
}
/** CREATED_TIME
*CREATED_TIME
*/
private java.util.Date createdTime;
@Column(name = "CREATED_TIME")
public java.util.Date getCreatedTime(){
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
this.createdTime = createdTime;
}
/** MODIFIER
*MODIFIER
*/
private String modifier;
@Column(name = "MODIFIER")
public String getModifier(){
return this.modifier;
}
public void setModifier(String modifier){
this.modifier = modifier;
}
/** MODIFIED_TIME
*MODIFIED_TIME
*/
private java.util.Date modifiedTime;
@Column(name = "MODIFIED_TIME")
public java.util.Date getModifiedTime(){
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
this.modifiedTime = modifiedTime;
}
}
\ No newline at end of file
package cn.com.poc.covenant.repository;
import cn.com.poc.covenant.model.BizExtractionKeyInfoConfigModel;
import cn.com.yict.framemax.data.repository.Repository;
public interface BizExtractionKeyInfoConfigRepository extends Repository<BizExtractionKeyInfoConfigModel, Integer> {
}
\ No newline at end of file
package cn.com.poc.covenant.repository;
import cn.com.poc.covenant.model.BizExtractionReviewTaskModel;
import cn.com.yict.framemax.data.repository.Repository;
public interface BizExtractionReviewTaskRepository extends Repository<BizExtractionReviewTaskModel, Integer> {
}
\ No newline at end of file
package cn.com.poc.covenant.repository;
import cn.com.poc.covenant.model.BizExtreactionContractTypeModel;
import cn.com.yict.framemax.data.repository.Repository;
public interface BizExtreactionContractTypeRepository extends Repository<BizExtreactionContractTypeModel, Integer> {
}
\ No newline at end of file
package cn.com.poc.covenant.rest;
import cn.com.poc.covenant.dto.ExtractionDto;
import cn.com.poc.covenant.dto.ReviewProgressDto;
import cn.com.poc.covenant.dto.StartReviewDto;
import cn.com.poc.covenant.model.BizExtreactionContractTypeModel;
import cn.com.yict.framemax.core.rest.BaseRest;
import cn.com.yict.framemax.web.permission.Access;
import cn.com.yict.framemax.web.permission.Permission;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 合同要素抽取服务
*
* @author alex.yao
* @date 2025/5/19
*/
@Permission(Access.Anonymous)
public interface ExtractionRest extends BaseRest {
/**
* 开始合同抽取
*/
String startExtract(@RequestBody StartReviewDto startReviewDto) throws Exception;
/**
* 开始合同审查
*/
String startReview(@RequestBody StartReviewDto startReviewDto) throws Exception;
/**
* 获取合同类型列表
*/
List<BizExtreactionContractTypeModel> getContractTypeList(@RequestParam String contractType) throws Exception;
/**
* 获取审核进度详情-列表
*/
List<ReviewProgressDto> reviewProgressList(@RequestParam String reviewTaskId, @RequestParam String search, @RequestParam String actionType);
/**
* 获取合同要素抽取结果
*
* @param taskId 任务ID
*/
ExtractionDto getResult(@RequestParam String taskId);
/**
* @param taskId 任务ID
* @return
*/
String getReviewUrl(@RequestParam String taskId) throws Exception;
}
package cn.com.poc.covenant.rest;
import cn.com.yict.framemax.core.rest.BaseRest;
import cn.com.yict.framemax.web.permission.Access;
import cn.com.yict.framemax.web.permission.Permission;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* 合同对比服务接口
*
* @author alex.yao
* @date 2025/6/25
*/
@Permission(Access.Anonymous)
public interface TextDiffRest extends BaseRest {
/**
* 文本对比
*
* @param baseFile 主版文件
* @param compareFile 副版文件
* @return 任务ID
*/
String textDiff(@RequestParam MultipartFile baseFile, @RequestParam MultipartFile compareFile);
/**
* 文本对比
*
* @param baseFileUrl 主版文件URL
* @param compareFileUrl 副版文件URL
* @return 任务ID
*/
String textDiffByUrl(@RequestParam String baseFileUrl, @RequestParam String compareFileUrl);
/**
* 获取前端SDK渲染地址
*
* @param taskId 任务ID
* @return 渲染地址
*/
String getRenderUrl(@RequestParam String taskId);
/**
* 查询任务状态
*/
String queryTextDiffTask(@RequestParam String taskId);
}
package cn.com.poc.covenant.rest.impl;
import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.FileUtils;
import cn.com.poc.covenant.rest.TextDiffRest;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
import cn.com.poc.thirdparty.resource.baidu.service.BaiduTextDiffService;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* @author alex.yao
* @date 2025/6/25
*/
@Component
public class TextDiffRestImpl implements TextDiffRest {
@Resource
private BaiduTextDiffService baiduTextDiffService;
@Override
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);
}
@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);
}
@Override
public String getRenderUrl(String taskId) {
Assert.notBlank(taskId, "Task ID cannot be blank");
return baiduTextDiffService.getSDKUrl(taskId);
}
@Override
public String queryTextDiffTask(String taskId) {
Assert.notBlank(taskId, "Task ID cannot be blank");
BaiduTextDiffQueryResult baiduTextDiffQueryResult = baiduTextDiffService.queryTextDiffTask(taskId);
return baiduTextDiffQueryResult.getResult().getStatus();
}
}
package cn.com.poc.covenant.scheduler;
import cn.com.poc.common.constant.CommonConstant;
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.text_in.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity.ExtractionResult;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* @author alex.yao
* @date 2025/5/21
*/
@Component
public class ExtractionReviewScheduler {
private final TextInClient textInClient = new TextInClient();
@Resource
private BizExtractionReviewTaskService bizExtractionReviewTaskService;
@Resource
private TextReviewApi textReviewApi;
@Resource
private FmxParamConfigService fmxConfigService;
@Resource
private BaiduTokenAPI baiduTokenAPI;
@Scheduled(cron = "0 0/1 * * * ?")
public void extraction() throws Exception {
// 执行任务
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setReviewStatus("RUN");
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.extract);
bizExtractionReviewTaskModel.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizExtractionReviewTaskModel> models = bizExtractionReviewTaskService.findByExample(bizExtractionReviewTaskModel, null);
if (CollectionUtils.isNotEmpty(models)) {
for (BizExtractionReviewTaskModel model : models) {
String textInTaskId = model.getTextInTaskId();
ExtractionResult extractionResult = textInClient.extractedResults(textInTaskId);
if (extractionResult == null) {
model.setReviewStatus("ERROR");
} else if (extractionResult.getCode().equals(209L)) {
model.setReviewStatus("RUN");
} else if (extractionResult.getCode().equals(200L)) {
model.setReviewStatus("END");
} else {
model.setReviewStatus("ERROR");
model.setReviewErrorMsg(extractionResult.getMsg());
}
}
bizExtractionReviewTaskService.saveAll(models);
}
}
@Scheduled(cron = "0 0/1 * * * ?")
public void textReviewTaskQuery() throws Exception {
// 执行任务
BizExtractionReviewTaskModel bizExtractionReviewTaskModel = new BizExtractionReviewTaskModel();
bizExtractionReviewTaskModel.setReviewStatus("RUN");
bizExtractionReviewTaskModel.setActionType(ContractConstants.ActionType.textreview);
bizExtractionReviewTaskModel.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizExtractionReviewTaskModel> models = bizExtractionReviewTaskService.findByExample(bizExtractionReviewTaskModel, null);
if (CollectionUtils.isNotEmpty(models)) {
String clientId = fmxConfigService.getParam("baidu.textmind.clientId");
String clientSecret = fmxConfigService.getParam("baidu.textmind.clientSecret");
String accessToken = baiduTokenAPI.getToken(clientId, clientSecret).getAccess_token();
for (BizExtractionReviewTaskModel model : models) {
String textInTaskId = model.getTextInTaskId();
TextReviewResultQueryResponse textReviewResponse = textReviewApi.textReviewTaskQuery(textInTaskId, accessToken);
if (textReviewResponse == null) {
model.setReviewStatus("ERROR");
} else if ("0".equals(textReviewResponse.getError_code())) {
if (textReviewResponse.getResult() != null && "success".equals(textReviewResponse.getResult().getStatus())) {
model.setReviewStatus("END");
}
} else {
model.setReviewStatus("ERROR");
}
}
bizExtractionReviewTaskService.saveAll(models);
}
}
}
package cn.com.poc.covenant.service;
import cn.com.poc.covenant.model.BizExtractionKeyInfoConfigModel;
import cn.com.yict.framemax.core.service.BaseService;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.Collection;
import java.util.List;
public interface BizExtractionKeyInfoConfigService extends BaseService {
BizExtractionKeyInfoConfigModel get(Integer id) throws Exception;
List<BizExtractionKeyInfoConfigModel> findByExample(BizExtractionKeyInfoConfigModel example,PagingInfo pagingInfo) ;
void delete(BizExtractionKeyInfoConfigModel model) throws Exception;
void deleteById(Integer id) throws Exception;
void deleteAll(Collection<Integer> ids) throws Exception;
BizExtractionKeyInfoConfigModel save(BizExtractionKeyInfoConfigModel model) throws Exception;
Collection<BizExtractionKeyInfoConfigModel> saveAll(Collection<BizExtractionKeyInfoConfigModel> models) throws Exception;
}
\ No newline at end of file
package cn.com.poc.covenant.service;
import cn.com.poc.covenant.model.BizExtractionReviewTaskModel;
import cn.com.poc.covenant.query.ExtractionTaskQueryCondition;
import cn.com.poc.covenant.query.ExtractionTaskQueryItem;
import cn.com.yict.framemax.core.service.BaseService;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.Collection;
import java.util.List;
public interface BizExtractionReviewTaskService extends BaseService {
BizExtractionReviewTaskModel get(Integer id) throws Exception;
List<BizExtractionReviewTaskModel> findByExample(BizExtractionReviewTaskModel example, PagingInfo pagingInfo) throws Exception;
void delete(BizExtractionReviewTaskModel model) throws Exception;
void deleteById(Integer id) throws Exception;
void deleteAll(Collection<Integer> ids) throws Exception;
BizExtractionReviewTaskModel save(BizExtractionReviewTaskModel model) throws Exception;
Collection<BizExtractionReviewTaskModel> saveAll(Collection<BizExtractionReviewTaskModel> models) throws Exception;
List<ExtractionTaskQueryItem> extractionTaskQuery(ExtractionTaskQueryCondition condition, PagingInfo pagingInfo);
}
\ No newline at end of file
package cn.com.poc.covenant.service;
import cn.com.poc.covenant.model.BizExtreactionContractTypeModel;
import cn.com.yict.framemax.core.service.BaseService;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.Collection;
import java.util.List;
public interface BizExtreactionContractTypeService extends BaseService {
BizExtreactionContractTypeModel get(Integer id) throws Exception;
List<BizExtreactionContractTypeModel> findByExample(BizExtreactionContractTypeModel example,PagingInfo pagingInfo) throws Exception;
void delete(BizExtreactionContractTypeModel model) throws Exception;
void deleteById(Integer id) throws Exception;
void deleteAll(Collection<Integer> ids) throws Exception;
BizExtreactionContractTypeModel save(BizExtreactionContractTypeModel model) throws Exception;
Collection<BizExtreactionContractTypeModel> saveAll(Collection<BizExtreactionContractTypeModel> models) throws Exception;
}
\ No newline at end of file
package cn.com.poc.covenant.service.impl;
import cn.com.poc.covenant.model.BizExtractionKeyInfoConfigModel;
import cn.com.poc.covenant.repository.BizExtractionKeyInfoConfigRepository;
import cn.com.poc.covenant.service.BizExtractionKeyInfoConfigService;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
@Service
public class BizExtractionKeyInfoConfigServiceImpl extends BaseServiceImpl
implements BizExtractionKeyInfoConfigService {
@Resource
private BizExtractionKeyInfoConfigRepository repository;
public BizExtractionKeyInfoConfigModel get(Integer id) throws Exception{
return this.repository.get(id);
}
public List<BizExtractionKeyInfoConfigModel> findByExample(BizExtractionKeyInfoConfigModel example,PagingInfo pagingInfo) {
if(example == null){
example = new BizExtractionKeyInfoConfigModel();
}
return this.repository.findByExample(example,pagingInfo);
}
public void delete(BizExtractionKeyInfoConfigModel model) throws Exception{
this.repository.remove(model);
}
public void deleteById(Integer id) throws Exception{
this.repository.removeByPk(id);
}
public void deleteAll(Collection<Integer> ids) throws Exception{
this.repository.removeAllByPk(ids);
}
public BizExtractionKeyInfoConfigModel save(BizExtractionKeyInfoConfigModel model) throws Exception{
return this.repository.save(model);
}
public Collection<BizExtractionKeyInfoConfigModel> saveAll(Collection<BizExtractionKeyInfoConfigModel> models) throws Exception{
return this.repository.saveAll(models);
}
}
\ No newline at end of file
package cn.com.poc.covenant.service.impl;
import cn.com.poc.covenant.model.BizExtractionReviewTaskModel;
import cn.com.poc.covenant.query.ExtractionTaskQueryCondition;
import cn.com.poc.covenant.query.ExtractionTaskQueryItem;
import cn.com.poc.covenant.repository.BizExtractionReviewTaskRepository;
import cn.com.poc.covenant.service.BizExtractionReviewTaskService;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
@Service
public class BizExtractionReviewTaskServiceImpl extends BaseServiceImpl
implements BizExtractionReviewTaskService {
@Resource
private BizExtractionReviewTaskRepository repository;
public BizExtractionReviewTaskModel get(Integer id) throws Exception {
return this.repository.get(id);
}
public List<BizExtractionReviewTaskModel> findByExample(BizExtractionReviewTaskModel example, PagingInfo pagingInfo) throws Exception {
if (example == null) {
example = new BizExtractionReviewTaskModel();
}
return this.repository.findByExample(example, pagingInfo);
}
public void delete(BizExtractionReviewTaskModel model) throws Exception {
this.repository.remove(model);
}
public void deleteById(Integer id) throws Exception {
this.repository.removeByPk(id);
}
public void deleteAll(Collection<Integer> ids) throws Exception {
this.repository.removeAllByPk(ids);
}
public BizExtractionReviewTaskModel save(BizExtractionReviewTaskModel model) throws Exception {
return this.repository.save(model);
}
public Collection<BizExtractionReviewTaskModel> saveAll(Collection<BizExtractionReviewTaskModel> models) throws Exception {
return this.repository.saveAll(models);
}
@Override
public List<ExtractionTaskQueryItem> extractionTaskQuery(ExtractionTaskQueryCondition condition, PagingInfo pagingInfo) {
return this.sqlDao.query(condition, ExtractionTaskQueryItem.class, pagingInfo);
}
}
\ No newline at end of file
package cn.com.poc.covenant.service.impl;
import cn.com.poc.covenant.model.BizExtreactionContractTypeModel;
import cn.com.poc.covenant.repository.BizExtreactionContractTypeRepository;
import cn.com.poc.covenant.service.BizExtreactionContractTypeService;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
@Service
public class BizExtreactionContractTypeServiceImpl extends BaseServiceImpl
implements BizExtreactionContractTypeService {
@Resource
private BizExtreactionContractTypeRepository repository;
public BizExtreactionContractTypeModel get(Integer id) throws Exception{
return this.repository.get(id);
}
public List<BizExtreactionContractTypeModel> findByExample(BizExtreactionContractTypeModel example,PagingInfo pagingInfo) throws Exception{
if(example == null){
example = new BizExtreactionContractTypeModel();
}
return this.repository.findByExample(example,pagingInfo);
}
public void delete(BizExtreactionContractTypeModel model) throws Exception{
this.repository.remove(model);
}
public void deleteById(Integer id) throws Exception{
this.repository.removeByPk(id);
}
public void deleteAll(Collection<Integer> ids) throws Exception{
this.repository.removeAllByPk(ids);
}
public BizExtreactionContractTypeModel save(BizExtreactionContractTypeModel model) throws Exception{
return this.repository.save(model);
}
public Collection<BizExtreactionContractTypeModel> saveAll(Collection<BizExtreactionContractTypeModel> models) throws Exception{
return this.repository.saveAll(models);
}
}
\ No newline at end of file
......@@ -20,4 +20,6 @@ public interface BaiduBaseApi {
Header acceptHeader = new BasicHeader(HttpHeaders.ACCEPT, ContentType.APPLICATION_JSON.toString());
Header formUrlEncodeHeader = new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.withCharset("utf-8").toString());
Header multipartFormDataHeader = new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.MULTIPART_FORM_DATA.toString());
}
package cn.com.poc.thirdparty.resource.baidu.api;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.baidu.entity.response.BaiduTextDiffResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff.BaiduTextDiffQueryResult;
import cn.com.poc.thirdparty.resource.baidu.entity.result.BaiduTextDiffResult;
import cn.com.yict.framemax.core.exception.BusinessException;
import com.google.gson.Gson;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* 百度文档对比API
*
* @author alex.yao
* @desc 接口描述
* 文档比对支持精准比对文档的增删改差异,快速定位并高亮显示差异原文,支持导出完整的比对报告,大幅提升比对准确性和效率。
* 如希望快速可视化体验效果,可登录智能文档分析平台,一键上传文档,在线测试;在线工具和API服务的额度共享互通。
* 文档比对API服务为异步接口,需要先调用提交请求接口获取 taskID,
* 然后调用获取结果接口进行结果轮询,建议提交请求后5~10秒开始轮询。提交请求接口QPS为2,获取结果接口QPS为10。
* @url https://cloud.baidu.com/doc/OCR/s/Glqd7jgmf
* @date 2025/6/25
*/
@Component
public class BaiduTextDiffApi implements BaiduBaseApi {
private final Logger logger = LoggerFactory.getLogger(BaiduTextDiffApi.class);
public final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().readTimeout(300, TimeUnit.SECONDS).build();
/**
* 提交请求接口
* <p>
* https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/create_task
*/
public BaiduTextDiffResult textDiff(BaiduTextDiffResponse response, String token) {
Assert.notNull(response);
Assert.notNull(token);
String url = BASE_API + "file/2.0/brain/online/v1/textdiff/create_task?access_token=" + token;
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
try {
if (StringUtils.isNotBlank(response.getBaseFileURL())) {
builder = builder
.addFormDataPart("baseFileURL", response.getBaseFileURL())
.addFormDataPart("compareFileURL", response.getCompareFileURL());
} else {
RequestBody baseFile = RequestBody.create(MediaType.parse(Objects.requireNonNull(response.getBaseFile().getContentType())), response.getBaseFile().getBytes());
RequestBody compareFile = RequestBody.create(MediaType.parse(Objects.requireNonNull(response.getCompareFile().getContentType())), response.getCompareFile().getBytes());
builder = builder.addFormDataPart("baseFile", response.getBaseFile().getOriginalFilename(), baseFile)
.addFormDataPart("compareFile", response.getCompareFile().getOriginalFilename(), compareFile);
}
MultipartBody body = builder.build();
Request request = new Request.Builder()
.url(url)
.method("POST", body)
.addHeader("Content-Type", "multipart/form-data")
.build();
String result = Objects.requireNonNull(HTTP_CLIENT.newCall(request).execute().body()).string();
Gson gson = new Gson();
return gson.fromJson(result, BaiduTextDiffResult.class);
} catch (IOException e) {
logger.error("百度文本对比接口调用失败", e);
throw new BusinessException("百度文本对比接口调用失败");
}
}
/**
* 获取结果接口
* https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/query_task
*/
public BaiduTextDiffQueryResult queryTask(String taskId, String token) {
Assert.notNull(taskId);
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
builder.addFormDataPart("taskId", taskId);
MultipartBody body = builder.build();
Request request = new Request.Builder()
.url(BASE_API + "file/2.0/brain/online/v1/textdiff/query_task?access_token=" + token)
.method("POST", body)
.addHeader("Content-Type", "multipart/form-data")
.build();
try {
String result = Objects.requireNonNull(HTTP_CLIENT.newCall(request).execute().body()).string();
Gson gson = new Gson();
return gson.fromJson(result, BaiduTextDiffQueryResult.class);
} catch (IOException e) {
logger.error("查询文本对比任务失败", e);
throw new BusinessException("查询文本对比任务失败");
}
}
}
......@@ -19,8 +19,8 @@ public class BaiduTokenAPI implements BaiduBaseApi {
Assert.notNull(secretKey);
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(BASE_API + "oauth/2.0/token")
.setHeader(jsonHeader)
.setHeader(acceptHeader)
.addHeader(jsonHeader)
.addHeader(acceptHeader)
.addParameter("grant_type", "client_credentials")
.addParameter("client_id",apiKey )
.addParameter("client_secret", secretKey)
......
package cn.com.poc.thirdparty.resource.baidu.api;
import cn.com.poc.thirdparty.resource.baidu.entity.response.TextReviewSubmitResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.response.TextReviewResultQueryResponse;
import cn.com.poc.thirdparty.resource.baidu.entity.result.TextReviewRequest;
import com.google.gson.Gson;
import okhttp3.*;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* @author alex.yao
* @date 2025/5/21
*/
@Component
public class TextReviewApi {
// https://aip.baidubce.com/file/2.0/brain/online/v1/textreview/task
public static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().readTimeout(300, TimeUnit.SECONDS).build();
public TextReviewSubmitResponse textReview(TextReviewRequest textReviewRequest, String token) throws IOException {
File file = textReviewRequest.getFile();
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(null, file))
.addFormDataPart("templateName", textReviewRequest.getTemplateName())
.addFormDataPart("commentRiskLevel", textReviewRequest.getCommentRiskLevel())
.build();
Request request = new Request.Builder()
.url("https://aip.baidubce.com/file/2.0/brain/online/v1/textreview/task?access_token=" + token)
.method("POST", body)
.addHeader("Content-Type", "multipart/form-data")
.build();
String response = HTTP_CLIENT.newCall(request).execute().body().string();
Gson gson = new Gson();
return gson.fromJson(response, TextReviewSubmitResponse.class);
}
public TextReviewResultQueryResponse textReviewTaskQuery(String taskId, String token) throws IOException {
MediaType mediaType = MediaType.parse("multipart/form-data");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("taskId", taskId)
.build();
Request request = new Request.Builder()
.url("https://aip.baidubce.com/file/2.0/brain/online/v1/textreview/task/query?access_token=" + token)
.method("POST", body)
.addHeader("Content-Type", "multipart/form-data")
.build();
String response = HTTP_CLIENT.newCall(request).execute().body().string();
Gson gson = new Gson();
return gson.fromJson(response, TextReviewResultQueryResponse.class);
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
/**
* @author alex.yao
* @date 2025/6/25
*/
public class BaiduTextDiffResponse {
/**
* 文件数据,主版比对文档
* 支持的文件类型:
* -图片:bmp/jpg/jpeg/png/tif/tiff
* -文档:doc/docx/wps/pdf/ofd
* 支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px
* 优先级: baseFile > baseFileURL,当baseFile字段存在时,baseFileURL字段失效
*/
private MultipartFile baseFile;
/**
* 文件数据,副版比对文档
* 支持的文件类型:
* -图片:bmp/jpg/jpeg/png/tif/tiff
* -文档:doc/docx/wps/pdf/ofd
* 支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px
* 优先级: compareFile > compareFileURL,当compareFile字段存在时,compareFileURL字段失效
*/
private MultipartFile compareFile;
private String baseFileURL;
private String compareFileURL;
/**
* 文档比对特殊差异识别参数。默认为false。将指定参数以json格式传递。例如,传递参数{"sealRecognition":true,"handWritingRecognition":true}将分别启用印章识别与手写体识别功能
*/
private Param param;
public MultipartFile getBaseFile() {
return baseFile;
}
public void setBaseFile(MultipartFile baseFile) {
this.baseFile = baseFile;
}
public MultipartFile getCompareFile() {
return compareFile;
}
public void setCompareFile(MultipartFile compareFile) {
this.compareFile = compareFile;
}
public String getBaseFileURL() {
return baseFileURL;
}
public void setBaseFileURL(String baseFileURL) {
this.baseFileURL = baseFileURL;
}
public String getCompareFileURL() {
return compareFileURL;
}
public void setCompareFileURL(String compareFileURL) {
this.compareFileURL = compareFileURL;
}
public Param getParam() {
return param;
}
public void setParam(Param param) {
this.param = param;
}
/**
* sealRecognition 否 bool true/false 是否识别印章信息(识别印章信息有额外的时间开销)。默认为false
* fullWidthHalfWidthRecognition 否 bool true/false 是否识别中英文符号差异。默认为false
* fontFamilyRecognition 否 bool true/false 是否识别字体差异。默认为false
* fontSizeRecognition 否 bool true/false 是否识别字号差异。默认为false
* handWritingRecognition
*/
public static class Param {
private Boolean sealRecognition;
private Boolean fullWidthHalfWidthRecognition;
private Boolean fontFamilyRecognition;
private Boolean fontSizeRecognition;
private Boolean handWritingRecognition;
public Boolean getSealRecognition() {
return sealRecognition;
}
public void setSealRecognition(Boolean sealRecognition) {
this.sealRecognition = sealRecognition;
}
public Boolean getFullWidthHalfWidthRecognition() {
return fullWidthHalfWidthRecognition;
}
public void setFullWidthHalfWidthRecognition(Boolean fullWidthHalfWidthRecognition) {
this.fullWidthHalfWidthRecognition = fullWidthHalfWidthRecognition;
}
public Boolean getFontFamilyRecognition() {
return fontFamilyRecognition;
}
public void setFontFamilyRecognition(Boolean fontFamilyRecognition) {
this.fontFamilyRecognition = fontFamilyRecognition;
}
public Boolean getFontSizeRecognition() {
return fontSizeRecognition;
}
public void setFontSizeRecognition(Boolean fontSizeRecognition) {
this.fontSizeRecognition = fontSizeRecognition;
}
public Boolean getHandWritingRecognition() {
return handWritingRecognition;
}
public void setHandWritingRecognition(Boolean handWritingRecognition) {
this.handWritingRecognition = handWritingRecognition;
}
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response;
/**
* @Author:Roger Wu
* @name:TextReviewResult
* @Date:2025-05-29 17:30
*/
public class TextReviewQueryResult {
//任务状态,pending:排队中;processing:运行中;success:成功;failed:失败
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response;
/**
* @Author:Roger Wu
* @name:TextReviewResponse
* @Date:2025-05-29 17:29
*/
public class TextReviewResultQueryResponse {
private String log_id;
private String error_code;
private String error_msg;
private TextReviewQueryResult result;
public String getLog_id() {
return log_id;
}
public void setLog_id(String log_id) {
this.log_id = log_id;
}
public String getError_code() {
return error_code;
}
public void setError_code(String error_code) {
this.error_code = error_code;
}
public String getError_msg() {
return error_msg;
}
public void setError_msg(String error_msg) {
this.error_msg = error_msg;
}
public TextReviewQueryResult getResult() {
return result;
}
public void setResult(TextReviewQueryResult result) {
this.result = result;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response;
/**
* @Author:Roger Wu
* @name:TextReviewResponse
* @Date:2025-05-29 17:29
*/
public class TextReviewSubmitResponse {
private String log_id;
private String error_code;
private String error_msg;
private TextReviewSubmitResult result;
public String getLog_id() {
return log_id;
}
public void setLog_id(String log_id) {
this.log_id = log_id;
}
public String getError_code() {
return error_code;
}
public void setError_code(String error_code) {
this.error_code = error_code;
}
public String getError_msg() {
return error_msg;
}
public void setError_msg(String error_msg) {
this.error_msg = error_msg;
}
public TextReviewSubmitResult getResult() {
return result;
}
public void setResult(TextReviewSubmitResult result) {
this.result = result;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response;
/**
* @Author:Roger Wu
* @name:TextReviewResult
* @Date:2025-05-29 17:30
*/
public class TextReviewSubmitResult {
private String taskId;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff;
import cn.com.poc.thirdparty.resource.baidu.entity.result.BaiduErrorResult;
public class BaiduTextDiffQueryResult extends BaiduErrorResult {
private Result result;
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
@Generated("net.hexar.json2pojo")
@SuppressWarnings("unused")
public class DiffItemList {
@Expose
private List<Long> baseBoxArea;
@Expose
private String baseDiffBoxes;
@Expose
private String baseDiffContent;
@Expose
private List<Object> baseDiffContentType;
@Expose
private String baseDiffContext;
@Expose
private String baseDiffType;
@Expose
private Long basePageNum;
@Expose
private List<Long> compareBoxArea;
@Expose
private String compareDiffBoxes;
@Expose
private String compareDiffContent;
@Expose
private List<Object> compareDiffContentType;
@Expose
private String compareDiffContext;
@Expose
private String compareDiffType;
@Expose
private Long comparePageNum;
@Expose
private String id;
public List<Long> getBaseBoxArea() {
return baseBoxArea;
}
public void setBaseBoxArea(List<Long> baseBoxArea) {
this.baseBoxArea = baseBoxArea;
}
public String getBaseDiffBoxes() {
return baseDiffBoxes;
}
public void setBaseDiffBoxes(String baseDiffBoxes) {
this.baseDiffBoxes = baseDiffBoxes;
}
public String getBaseDiffContent() {
return baseDiffContent;
}
public void setBaseDiffContent(String baseDiffContent) {
this.baseDiffContent = baseDiffContent;
}
public List<Object> getBaseDiffContentType() {
return baseDiffContentType;
}
public void setBaseDiffContentType(List<Object> baseDiffContentType) {
this.baseDiffContentType = baseDiffContentType;
}
public String getBaseDiffContext() {
return baseDiffContext;
}
public void setBaseDiffContext(String baseDiffContext) {
this.baseDiffContext = baseDiffContext;
}
public String getBaseDiffType() {
return baseDiffType;
}
public void setBaseDiffType(String baseDiffType) {
this.baseDiffType = baseDiffType;
}
public Long getBasePageNum() {
return basePageNum;
}
public void setBasePageNum(Long basePageNum) {
this.basePageNum = basePageNum;
}
public List<Long> getCompareBoxArea() {
return compareBoxArea;
}
public void setCompareBoxArea(List<Long> compareBoxArea) {
this.compareBoxArea = compareBoxArea;
}
public String getCompareDiffBoxes() {
return compareDiffBoxes;
}
public void setCompareDiffBoxes(String compareDiffBoxes) {
this.compareDiffBoxes = compareDiffBoxes;
}
public String getCompareDiffContent() {
return compareDiffContent;
}
public void setCompareDiffContent(String compareDiffContent) {
this.compareDiffContent = compareDiffContent;
}
public List<Object> getCompareDiffContentType() {
return compareDiffContentType;
}
public void setCompareDiffContentType(List<Object> compareDiffContentType) {
this.compareDiffContentType = compareDiffContentType;
}
public String getCompareDiffContext() {
return compareDiffContext;
}
public void setCompareDiffContext(String compareDiffContext) {
this.compareDiffContext = compareDiffContext;
}
public String getCompareDiffType() {
return compareDiffType;
}
public void setCompareDiffType(String compareDiffType) {
this.compareDiffType = compareDiffType;
}
public Long getComparePageNum() {
return comparePageNum;
}
public void setComparePageNum(Long comparePageNum) {
this.comparePageNum = comparePageNum;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff;
public class Param {
private Boolean fontFamilyRecognition;
private Boolean fontSizeRecognition;
private Boolean fullWidthHalfWidthRecognition;
private Boolean handWritingRecognition;
private Boolean sealRecognition;
public Boolean getFontFamilyRecognition() {
return fontFamilyRecognition;
}
public void setFontFamilyRecognition(Boolean fontFamilyRecognition) {
this.fontFamilyRecognition = fontFamilyRecognition;
}
public Boolean getFontSizeRecognition() {
return fontSizeRecognition;
}
public void setFontSizeRecognition(Boolean fontSizeRecognition) {
this.fontSizeRecognition = fontSizeRecognition;
}
public Boolean getFullWidthHalfWidthRecognition() {
return fullWidthHalfWidthRecognition;
}
public void setFullWidthHalfWidthRecognition(Boolean fullWidthHalfWidthRecognition) {
this.fullWidthHalfWidthRecognition = fullWidthHalfWidthRecognition;
}
public Boolean getHandWritingRecognition() {
return handWritingRecognition;
}
public void setHandWritingRecognition(Boolean handWritingRecognition) {
this.handWritingRecognition = handWritingRecognition;
}
public Boolean getSealRecognition() {
return sealRecognition;
}
public void setSealRecognition(Boolean sealRecognition) {
this.sealRecognition = sealRecognition;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
@SuppressWarnings("unused")
public class Result {
private String duration;
private Param param;
private String status;
private List<SubTaskList> subTaskList;
private String taskId;
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public Param getParam() {
return param;
}
public void setParam(Param param) {
this.param = param;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<SubTaskList> getSubTaskList() {
return subTaskList;
}
public void setSubTaskList(List<SubTaskList> subTaskList) {
this.subTaskList = subTaskList;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.response.text_diff;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
@Generated("net.hexar.json2pojo")
@SuppressWarnings("unused")
public class SubTaskList {
@Expose
private String baseDocId;
@Expose
private String baseDocName;
@Expose
private String baseDocOssURL;
@Expose
private String compareDocId;
@Expose
private String compareDocName;
@Expose
private String compareDocOssURL;
@Expose
private String compareStatus;
@Expose
private String createdAt;
@Expose
private List<DiffItemList> diffItemList;
@Expose
private String finishedAt;
@Expose
private String reportOssURL;
@Expose
private String reportStatus;
@Expose
private String similarity;
@Expose
private Long totalDiff;
public String getBaseDocId() {
return baseDocId;
}
public void setBaseDocId(String baseDocId) {
this.baseDocId = baseDocId;
}
public String getBaseDocName() {
return baseDocName;
}
public void setBaseDocName(String baseDocName) {
this.baseDocName = baseDocName;
}
public String getBaseDocOssURL() {
return baseDocOssURL;
}
public void setBaseDocOssURL(String baseDocOssURL) {
this.baseDocOssURL = baseDocOssURL;
}
public String getCompareDocId() {
return compareDocId;
}
public void setCompareDocId(String compareDocId) {
this.compareDocId = compareDocId;
}
public String getCompareDocName() {
return compareDocName;
}
public void setCompareDocName(String compareDocName) {
this.compareDocName = compareDocName;
}
public String getCompareDocOssURL() {
return compareDocOssURL;
}
public void setCompareDocOssURL(String compareDocOssURL) {
this.compareDocOssURL = compareDocOssURL;
}
public String getCompareStatus() {
return compareStatus;
}
public void setCompareStatus(String compareStatus) {
this.compareStatus = compareStatus;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public List<DiffItemList> getDiffItemList() {
return diffItemList;
}
public void setDiffItemList(List<DiffItemList> diffItemList) {
this.diffItemList = diffItemList;
}
public String getFinishedAt() {
return finishedAt;
}
public void setFinishedAt(String finishedAt) {
this.finishedAt = finishedAt;
}
public String getReportOssURL() {
return reportOssURL;
}
public void setReportOssURL(String reportOssURL) {
this.reportOssURL = reportOssURL;
}
public String getReportStatus() {
return reportStatus;
}
public void setReportStatus(String reportStatus) {
this.reportStatus = reportStatus;
}
public String getSimilarity() {
return similarity;
}
public void setSimilarity(String similarity) {
this.similarity = similarity;
}
public Long getTotalDiff() {
return totalDiff;
}
public void setTotalDiff(Long totalDiff) {
this.totalDiff = totalDiff;
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.result;
/**
* @author alex.yao
* @date 2025/6/25
*/
public class BaiduTextDiffResult extends BaiduErrorResult {
private Result result;
public void setResult(Result result) {
this.result = result;
}
public Result getResult() {
return result;
}
public class Result {
private String taskId;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
}
}
package cn.com.poc.thirdparty.resource.baidu.entity.result;
import java.io.File;
/**
* @Author:Roger Wu
* @name:TextReviewRequest
* @Date:2025-05-29 17:15
*/
public class TextReviewRequest {
/**
* 文件数据,支持Word和PDF格式,文件大小不超过10M
* 优先级: file > fileURLList,当file字段存在时,fileURLList字段失效
*/
private File file;
/**
* 文件完整URL,仅支持北京区域的BOS公网访问,URL长度不超过1024字节,支持PDF/doc/docx格式,仅支持上传1篇文件,文件大小不超过10M
* 优先级: file > fileURLList,当file字段存在时,fileURLList字段失效
* 请注意关闭URL防盗链
*/
private String fileURLList;
/**
* 该清单类型为系统预置清单。每次审查任务仅可选择单一清单。具体清单选项如下:
* - Sales_PartyA_V2:买卖合同-买方;
* - Sales_PartyB_V2:买卖合同-卖方;
* - Lease_PartyA_V2:租赁合同-出租方;
* - Lease_PartyB_V2:租赁合同-承租方;
* - TechDev_PartyA_V2:技术开发合同-委托方;
* - TechDev_PartyB_V2:技术开发合同-受托方;
* - Labor_PartyA_V2:劳动合同-用人单位;
* - Labor_PartyB_V2:劳动合同-劳动者;
* - Entrustment_PartyA_V2:委托合同-委托方;
* - Entrustment_PartyB_V2:委托合同-受托方;
* - Work-for-hire_PartyA_V2:承揽合同-定作人;
* - Work-for-hire_PartyB_V2:承揽合同-承揽人;
* - LaborDispatch_PartyA_V2:劳务派遣合同-用工单位;
* - LaborDispatch_PartyB_V2:劳务派遣合同-劳务派遣单位;
* - RealtySvcs_PartyA_V2:物业服务合同-业主;
* - RealtySvcs_PartyB_V2:物业服务合同-物业服务人;
* - EquipPur_PartyA_V2:设备采购合同-买方;
* - EquipPur_PartyB_V2:设备采购合同-卖方;
* - FinLease_PartyA_V2:融资租赁合同-出租方;
* - FinLease_PartyB_V2:融资租赁合同-承租方;
* - DebtAssign_PartyA_V2:债权转让合同-转让方;
* - DebtAssign_PartyB_V2:债权转让合同-受让方;
* - CISG_PartyA_V2:国际货物贸易合同-买方;
* - CISG_PartyB_V2:国际货物贸易合同-卖方 ;
* - GUAR_PartyA_V2:保证合同-保证方 ;
* - GUAR_PartyA_V2:保证合同-债权方 ;
* - CG_PartyA_V2:货运合同-承运方 ;
* - CG_PartyB_V2:货运合同-托运方 ;
* - Factoring_PartyA_V2:保理合同-保理商 ;
* - Factoring_PartyB_V2:保理合同-卖方 ;
* - Brokerage_PartyA_V2:中介合同-委托人 ;
* - Brokerage_PartyB_V2:中介合同-中介人 ;
* - TradingTrust_PartyA_V2:行纪合同-委托人 ;
* - TradingTrust_PartyB_V2:行纪合同-行纪人 ;
* - PNRship_V2:合伙合同-合伙人 ;
* - PT/PAT_PartyA_V2:专利(申请)权转让合同-受让方 ;
* - PT/PAT_PartyB_V2:专利(申请)权转让合同-转让方;
* - TST_PartyA_V2:技术秘密转让合同-受让方;
* - TST_PartyB_V2:技术秘密转让合同-转让方;
* - TST_PartyB_V2:技术秘密转让合同-转让方;
* -TechLic_PartyA_V2:技术许可合同-许可方;
* -TechLic_PartyB_V2:技术许可合同-被许可方;
* - EquipLea_PartyA_V2:设备租赁合同-出租方;
* - EquipLea_PartyB_V2:设备租赁合同-承租方;
* - ConstCtrl_PartyA_V2:建设工程施工合同-发包方;
* - ConstCtrl_PartyB_V2:建设工程施工合同-承包方
*/
private String templateName;
/**
* 该清单类型为用户在合同审查清单管理 创建的我的清单。每次审查任务仅可选择单一清单
* https://ai.baidu.com/ai-doc/OCR/olqc085rg
*/
private String templateId;
/**
* 筛选下载的批注结果中展示的风险等级条款。默认为"major",即仅展示重大风险条款。
* - normal:一般风险;
* - major:重大风险;
* - all:一般风险和重大风险
*/
private String commentRiskLevel;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileURLList() {
return fileURLList;
}
public void setFileURLList(String fileURLList) {
this.fileURLList = fileURLList;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public String getCommentRiskLevel() {
return commentRiskLevel;
}
public void setCommentRiskLevel(String commentRiskLevel) {
this.commentRiskLevel = commentRiskLevel;
}
}
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
*/
public interface BaiduTextDiffService {
/**
* 文档比对任务创建接口
*
* @param baseFile 主版比对文档
* @param compareFile 副版比对文档
* @param param 参数
* @return taskId - 任务ID
*/
String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param);
/**
* 文档比对任务创建接口
*
* @param baseFileUrl 主版比对文档URL
* @param compareFileUrl 副版比对文档URL
* @param param 参数
* @return taskId - 任务ID
*/
String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param);
/**
* 查询文档比对任务结果
*
* @param taskId 任务ID
* @return BaiduTextDiffQueryResult - 文档比对任务结果对象
*/
BaiduTextDiffQueryResult queryTextDiffTask(String taskId);
/**
* 获取前端SDK渲染
*
* @param taskId 任务ID
* @return SDK渲染地址
*/
String getSDKUrl(String taskId);
}
......@@ -7,4 +7,6 @@ package cn.com.poc.thirdparty.resource.baidu.service;
public interface BaiduTokenService {
String getToken();
String getToken(String clientId, String clientSecret);
}
package cn.com.poc.thirdparty.resource.baidu.service.impl;
import cn.com.poc.common.utils.StringUtils;
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;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* @author alex.yao
* @date 2025/6/25
*/
@Service
public class BaiduTextDiffServiceImpl implements BaiduTextDiffService {
private final Logger logger = LoggerFactory.getLogger(BaiduTextDiffService.class);
@Value("baidu.text_diff.client_id")
private String clientId;
@Value("baidu.text_diff.client_secret")
private String clientSecret;
@Resource
private BaiduTextDiffApi baiduTextDiffApi;
@Resource
private BaiduTokenService baiduTokenService;
@Override
public String textDiff(MultipartFile baseFile, MultipartFile compareFile, BaiduTextDiffResponse.Param param) {
BaiduTextDiffResponse baiduTextDiffResponse = new BaiduTextDiffResponse();
baiduTextDiffResponse.setBaseFile(baseFile);
baiduTextDiffResponse.setCompareFile(compareFile);
baiduTextDiffResponse.setParam(param);
return createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
}
@Override
public String textDiff(String baseFileUrl, String compareFileUrl, BaiduTextDiffResponse.Param param) {
BaiduTextDiffResponse baiduTextDiffResponse = new BaiduTextDiffResponse();
baiduTextDiffResponse.setBaseFileURL(baseFileUrl);
baiduTextDiffResponse.setCompareFileURL(compareFileUrl);
baiduTextDiffResponse.setParam(param);
return createTextDiffTask(baiduTextDiffResponse, baiduTokenService.getToken(clientId, clientSecret));
}
private String createTextDiffTask(BaiduTextDiffResponse baiduTextDiffResponse, String token) {
BaiduTextDiffResult baiduTextDiffResult = baiduTextDiffApi.textDiff(baiduTextDiffResponse, token);
if (baiduTextDiffResult == null || !baiduTextDiffResult.getError_code().equals(0)) {
if (baiduTextDiffResult != null
&& baiduTextDiffResult.getError_code() != null
&& StringUtils.isNotBlank(baiduTextDiffResult.getError_msg())) {
logger.error("文档比对任务创建失败,错误码:{},错误信息:{}", baiduTextDiffResult.getError_code(), baiduTextDiffResult.getError_msg());
}
throw new BusinessException("文档比对任务创建失败");
}
return baiduTextDiffResult.getResult().getTaskId();
}
@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());
}
throw new BusinessException("查询文档对比任务失败");
}
return baiduTextDiffQueryResult;
}
@Override
public String getSDKUrl(String taskId) {
String baseUrl = "https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}";
String token = baiduTokenService.getToken(clientId, clientSecret);
baseUrl = baseUrl.replace("{taskId}", taskId).replace("{access_token}", token);
return baseUrl;
}
}
......@@ -31,7 +31,20 @@ public class BaiduTokenServiceImpl implements BaiduTokenService {
String SECRET_ACCESS_KEY = Config.get("baidu.code.keySecret");
if (null == redisService.get(BAIDU_AI_CUSTOM_TOKEN)) {
BaiduTokenResult token = baiduTokenApi.getToken(ACCESS_KEY_ID, SECRET_ACCESS_KEY);
if (StringUtils.isNoneBlank(token.getError())) {
if (token == null || StringUtils.isNoneBlank(token.getError())) {
throw new I18nMessageException("exception/failed.to.obtain.baidu.token");
}
redisService.set(BAIDU_AI_CUSTOM_TOKEN, token.getAccess_token(), token.getExpires_in());
}
return redisService.get(BAIDU_AI_CUSTOM_TOKEN).toString();
}
@Override
public String getToken(String clientId, String clientSecret) {
String BAIDU_AI_CUSTOM_TOKEN = "BAIDU_TOKEN_" + clientId;
if (null == redisService.get(BAIDU_AI_CUSTOM_TOKEN)) {
BaiduTokenResult token = baiduTokenApi.getToken(clientId, clientSecret);
if (token == null || StringUtils.isNoneBlank(token.getError())) {
throw new I18nMessageException("exception/failed.to.obtain.baidu.token");
}
redisService.set(BAIDU_AI_CUSTOM_TOKEN, token.getAccess_token(), token.getExpires_in());
......
......@@ -9,8 +9,10 @@ import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunct
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.com.poc.thirdparty.resource.demand.ai.function.extraction.entity.KeyInfo;
import cn.com.poc.thirdparty.resource.textin.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity.KeyInfo;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.json.JSONException;
import com.alibaba.fastjson.JSONArray;
......
......@@ -9,7 +9,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunct
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.com.poc.thirdparty.resource.textin.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.api.TextInClient;
import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
......
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
@SuppressWarnings("unused")
public class Config {
private String engine;
private String remove_watermark;
private String use_pdf_parser;
private String use_semantic_match;
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
public String getRemove_watermark() {
return remove_watermark;
}
public void setRemove_watermark(String remove_watermark) {
this.remove_watermark = remove_watermark;
}
public String getUse_pdf_parser() {
return use_pdf_parser;
}
public void setUse_pdf_parser(String use_pdf_parser) {
this.use_pdf_parser = use_pdf_parser;
}
public String getUse_semantic_match() {
return use_semantic_match;
}
public void setUse_semantic_match(String use_semantic_match) {
this.use_semantic_match = use_semantic_match;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class CreateExtractionResponse {
private Config config;
private String creator;
private String filedata;
private String filename;
private List<KeyInfo> key_info_list;
private Long token_mode;
public Config getConfig() {
return config;
}
public void setConfig(Config config) {
this.config = config;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getFiledata() {
return filedata;
}
public void setFiledata(String filedata) {
this.filedata = filedata;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public List<KeyInfo> getKey_info_list() {
return key_info_list;
}
public void setKey_info_list(List<KeyInfo> key_info_list) {
this.key_info_list = key_info_list;
}
public Long getToken_mode() {
return token_mode;
}
public void setToken_mode(Long token_mode) {
this.token_mode = token_mode;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
/**
* @author alex.yao
* @date 2025/5/21
*/
public class CreateResult {
private Integer code;
private Data data;
private String msg;
public static class Data {
private String extracted_results_url;
private String preview_url;
private String task_id;
public String getExtracted_results_url() {
return extracted_results_url;
}
public void setExtracted_results_url(String extracted_results_url) {
this.extracted_results_url = extracted_results_url;
}
public String getPreview_url() {
return preview_url;
}
public void setPreview_url(String preview_url) {
this.preview_url = preview_url;
}
public String getTask_id() {
return task_id;
}
public void setTask_id(String task_id) {
this.task_id = task_id;
}
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
import cn.com.poc.thirdparty.resource.text_in.entity.imageEdgeTriming.Result;
/**
* @author alex.yao
* @date 2025/5/19
*/
public class ExtractionResult {
private Long code;
private String msg;
private Result result;
public Long getCode() {
return code;
}
public void setCode(Long code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
/**
* @author alex.yao
* @date 2025/5/12
*/
public class KeyInfo {
public String key_info;
public String[] paraphrase_names;
public String field_type;
public boolean is_in_table;
public String[] keywords;
public KeyInfo() {
}
public KeyInfo(String key_info, String[] paraphrase_names, String field_type, boolean is_in_table, String[] keywords) {
this.key_info = key_info;
this.paraphrase_names = paraphrase_names;
this.field_type = field_type;
this.is_in_table = is_in_table;
this.keywords = keywords;
}
public String getKey_info() {
return key_info;
}
public void setKey_info(String key_info) {
this.key_info = key_info;
}
public String[] getParaphrase_names() {
return paraphrase_names;
}
public void setParaphrase_names(String[] paraphrase_names) {
this.paraphrase_names = paraphrase_names;
}
public String getField_type() {
return field_type;
}
public void setField_type(String field_type) {
this.field_type = field_type;
}
public boolean isIs_in_table() {
return is_in_table;
}
public void setIs_in_table(boolean is_in_table) {
this.is_in_table = is_in_table;
}
public String[] getKeywords() {
return keywords;
}
public void setKeywords(String[] keywords) {
this.keywords = keywords;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
/**
* @author alex.yao
* @date 2025/5/12
*/
public class RequestData {
public Integer token_mode;
public String creator;
public Config config;
public String filedata;
public String filename;
public KeyInfo[] key_info_list;
public RequestData(String creator, Config config, String filedata, String filename, KeyInfo[] key_info_list) {
this.token_mode = 1;
this.creator = creator;
this.config = config;
this.filedata = filedata;
this.filename = filename;
this.key_info_list = key_info_list;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.extraction.entity;
import java.util.List;
/**
* @author alex.yao
* @date 2025/5/19
*/
public class Result {
private List<Item> customize_keys; //自配置字段数组
private List<Item> stamp_keys; //印章字段数组
public List<Item> getCustomize_keys() {
return customize_keys;
}
public void setCustomize_keys(List<Item> customize_keys) {
this.customize_keys = customize_keys;
}
public List<Item> getStamp_keys() {
return stamp_keys;
}
public void setStamp_keys(List<Item> stamp_keys) {
this.stamp_keys = stamp_keys;
}
public static class Item{
private String key; //字段名
private Object value; //字段值
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.imageEdgeTriming;
import com.google.gson.annotations.Expose;
import javax.annotation.Generated;
@Generated("net.hexar.json2pojo")
@SuppressWarnings("unused")
public class ImageEdgeTrimingResult {
@Expose
private Long duration;
@Expose
private Result result;
@Expose
private String version;
public Long getDuration() {
return duration;
}
public void setDuration(Long duration) {
this.duration = duration;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.imageEdgeTriming;
import java.util.List;
@SuppressWarnings("unused")
public class ImageList {
private Long angle;//图像角度,correct_direction=1时生效 定义0度为人类阅读文字的图像方向,称为正置图像, 本字段表示输入图像是正置图像进行顺时针若干角度的旋转所得。
private Long cropped_height;//图像处理后的高
private Long cropped_width;//图像处理后的宽
private String image;//图像处理后的jpg图片,base64格式
private List<Object> position;//切图区域的4个角点坐标, 是个长度为8的数组
public Long getAngle() {
return angle;
}
public void setAngle(Long angle) {
this.angle = angle;
}
public Long getCropped_height() {
return cropped_height;
}
public void setCropped_height(Long cropped_height) {
this.cropped_height = cropped_height;
}
public Long getCropped_width() {
return cropped_width;
}
public void setCropped_width(Long cropped_width) {
this.cropped_width = cropped_width;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public List<Object> getPosition() {
return position;
}
public void setPosition(List<Object> position) {
this.position = position;
}
}
package cn.com.poc.thirdparty.resource.text_in.entity.imageEdgeTriming;
import java.util.List;
@SuppressWarnings("unused")
public class Result {
private List<ImageList> image_list;
private Long origin_height;
private Long origin_width;
public List<ImageList> getImage_list() {
return image_list;
}
public void setImage_list(List<ImageList> image_list) {
this.image_list = image_list;
}
public Long getOrigin_height() {
return origin_height;
}
public void setOrigin_height(Long origin_height) {
this.origin_height = origin_height;
}
public Long getOrigin_width() {
return origin_width;
}
public void setOrigin_width(Long origin_width) {
this.origin_width = origin_width;
}
}
package cn.com.poc.thirdparty.resource.textin.entity;
/**
* @author alex.yao
* @date 2025/5/7
*/
public class PdfToMDResponse {
public String pdfPwd;
public Integer dpi;
public Integer pageStart;
public Integer pageCount;
public Boolean applyDocumentTree;
public String markdownDetails;
public String tableFlavor;
public String getImage;
public String parseMode;
public String getPdfPwd() {
return pdfPwd;
}
public void setPdfPwd(String pdfPwd) {
this.pdfPwd = pdfPwd;
}
public Integer getDpi() {
return dpi;
}
public void setDpi(Integer dpi) {
this.dpi = dpi;
}
public Integer getPageStart() {
return pageStart;
}
public void setPageStart(Integer pageStart) {
this.pageStart = pageStart;
}
public Integer getPageCount() {
return pageCount;
}
public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}
public Boolean getApplyDocumentTree() {
return applyDocumentTree;
}
public void setApplyDocumentTree(Boolean applyDocumentTree) {
this.applyDocumentTree = applyDocumentTree;
}
public String getMarkdownDetails() {
return markdownDetails;
}
public void setMarkdownDetails(String markdownDetails) {
this.markdownDetails = markdownDetails;
}
public String getTableFlavor() {
return tableFlavor;
}
public void setTableFlavor(String tableFlavor) {
this.tableFlavor = tableFlavor;
}
public String getGetImage() {
return getImage;
}
public void setGetImage(String getImage) {
this.getImage = getImage;
}
public String getParseMode() {
return parseMode;
}
public void setParseMode(String parseMode) {
this.parseMode = parseMode;
}
}
package cn.com.poc.thirdparty.resource.textin.entity;
/**
* @author alex.yao
* @date 2025/5/7
*/
public class PdfToMDResult {
}
......@@ -55,6 +55,10 @@ baidu.code.mainLand.signatureId=sms-sign-wqlTsv51668
baidu.code.mainLand.template=sms-tmpl-AnDHlz15911
baidu.code.gangAo.signatureId=sms-sign-FcfPaR54702
baidu.code.gangAo.template=sms-tmpl-GZmkfn63181
#baidu text_diff
baidu.text_diff.client_id=ugOntUL9xGeePxI2IFlRO9IO
baidu.text_diff.client_secret=YZqMbOZMe9qnaj1ts2DP59xjfOWvKpDU
#tencent
tencent.speech.synthesizer.appid=1251105573
tencent.speech.synthesizer.secretId=AKIDAGE2Y1KWTGTTKZ5d5KTO5XzNdnpfOxPL
......
package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.thirdparty.resource.demand.ai.function.extraction.ContractExtractionFunction;
import cn.com.poc.thirdparty.resource.textin.api.TextInClient;
import cn.com.poc.thirdparty.resource.text_in.api.TextInClient;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
......
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