【添加】Schema接口开发完毕

This commit is contained in:
zer0Black
2023-10-01 13:28:05 +08:00
parent 8522219c61
commit e38cbdde77
17 changed files with 502 additions and 74 deletions
@@ -0,0 +1,35 @@
package com.jero.modules.docking.iam.annotation;
import java.lang.annotation.*;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface IamProperty {
// /**
// * 字段属性名
// * @return
// */
// String name() default "";
//
// /**
// *
// * @return
// */
// String type() default "";
/**
* 定义对象的属性字段在创建时是否为必填字段
* @return
*/
boolean required() default true;
/**
* 定义对象的属性字段是否为多值
* @return
*/
boolean multivalued() default false;
}
@@ -1,19 +1,38 @@
package com.jero.modules.docking.iam.controller;
import com.bamboocloud.codec.BamboocloudFacade;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jero.common.util.DateUtils;
import com.jero.common.util.UUIDGenerator;
import com.jero.common.util.UUIDUtils;
import com.jero.modules.docking.iam.dto.IamCommonAcceptDto;
import com.jero.modules.docking.iam.dto.IamOrgAcceptDto;
import com.jero.modules.docking.iam.dto.IamUserAcceptDto;
import com.jero.modules.docking.iam.dto.response.IamCommonResponseDto;
import com.jero.modules.docking.iam.dto.response.IamOrgCreateResponse;
import com.jero.modules.docking.iam.dto.response.IamSchemaResponse;
import com.jero.modules.docking.iam.dto.response.IamUserCreateResponse;
import com.jero.modules.docking.iam.exception.IamGlobalException;
import com.jero.modules.docking.iam.po.AcceptPoSystemPo;
import com.jero.modules.docking.iam.po.MessageHeader;
import com.jero.modules.docking.iam.po.SendPoSystemPo;
import com.jero.modules.docking.iam.po.SendReturnsPo;
import com.jero.modules.docking.iam.service.SyncIamService;
import com.jero.modules.docking.utils.BamboocloudUtils;
import com.jero.modules.docking.utils.DockingConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;
/**
* IAM同步的控制器,提供用户、组织、菜单和权限的同步
*/
@@ -22,51 +41,76 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
public class SyncIamController {
@Resource
private SyncIamService syncIamService;
@PostMapping({"/SchemaService"})
public SendPoSystemPo<IamSchemaResponse> SchemaService(@RequestBody AcceptPoSystemPo<IamCommonResponseDto> iamCommon) {
SendPoSystemPo<IamSchemaResponse> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo SchemaService(@RequestBody AcceptPoSystemPo<IamCommonAcceptDto> iamCommon) throws JsonProcessingException {
if (iamCommon == null
|| iamCommon.getMessageTabels() == null
|| iamCommon.getMessageTabels().getHeader() == null
|| iamCommon.getMessageTabels().getHeader().getData() == null){
throw new IamGlobalException(null, "参数传递错误,未收到参数");
}
// 对核心数据解密
String bodyParam = iamCommon.getMessageTabels().getHeader().getData();
String bodyParamDecrypt = BamboocloudUtils.getPlaintext(bodyParam, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
ObjectMapper objectMapper = new ObjectMapper();
IamCommonAcceptDto commonAcceptDto = objectMapper.readValue(bodyParamDecrypt, IamCommonAcceptDto.class);
// 校验身份认证,确保接口正确 必须调用!
this.syncIamService.validateUserAndPwd(commonAcceptDto);
// 处理业务逻辑,封装字段
IamSchemaResponse iamSchemaResponse = this.syncIamService.getSchemaInfo(commonAcceptDto);
// 处理统一响应PO层,并加密业务字段
MessageHeader acceptMessageHeader = iamCommon.getMessageHeader();
SendPoSystemPo sendPoSystemPo = this.syncIamService.handlerGloablResponse(acceptMessageHeader, iamSchemaResponse);
return sendPoSystemPo;
}
@PostMapping({"/UserCreateService"})
public SendPoSystemPo<IamUserCreateResponse> userCreateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo<IamUserCreateResponse> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo userCreateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@PostMapping({"/UserUpdateService"})
public SendPoSystemPo<IamCommonResponseDto> UserUpdateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo<IamCommonResponseDto> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo UserUpdateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@PostMapping({"/UserDeleteService"})
public SendPoSystemPo<IamCommonResponseDto> UserDeleteService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo<IamCommonResponseDto> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo UserDeleteService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamUserInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@PostMapping({"/OrgCreateService"})
public SendPoSystemPo<IamOrgCreateResponse> OrgCreateService(@RequestBody AcceptPoSystemPo<IamOrgAcceptDto> iamOrgInfo) {
SendPoSystemPo<IamOrgCreateResponse> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo OrgCreateService(@RequestBody AcceptPoSystemPo<IamOrgAcceptDto> iamOrgInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@PostMapping({"/OrgUpdateService"})
public SendPoSystemPo<IamCommonResponseDto> OrgUpdateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamOrgInfo) {
SendPoSystemPo<IamCommonResponseDto> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo OrgUpdateService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamOrgInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@PostMapping({"/OrgDeleteService"})
public SendPoSystemPo<IamCommonResponseDto> OrgDeleteService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamOrgInfo) {
SendPoSystemPo<IamCommonResponseDto> sendPoSystemPo = new SendPoSystemPo<>();
public SendPoSystemPo OrgDeleteService(@RequestBody AcceptPoSystemPo<IamUserAcceptDto> iamOrgInfo) {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
return sendPoSystemPo;
}
@@ -16,6 +16,7 @@ public class IamOrgAcceptDto extends IamCommonAcceptDto {
/**
* 机构编码.全集团唯一,不可重复,撤销后不可重新启用
*/
private String srmsOrgCode;
/**
@@ -8,7 +8,7 @@ import java.util.List;
* Schema映射的响应体
*/
@Data
public class IamSchemaResponse extends IamCommonResponseDto{
public class IamSchemaResponse {
/**
* 请求id,收到什么就返回什么
@@ -0,0 +1,27 @@
package com.jero.modules.docking.iam.exception;
import com.jero.common.util.MessageUtils;
public class IamGlobalException extends RuntimeException {
private String bimRequestId;
private String message;
private static final long serialVersionUID = 3634632351214L;
public IamGlobalException(String bimRequestId, String message){
super(message);
this.bimRequestId = bimRequestId;
this.message = message;
}
public String getBimRequestId() {
return bimRequestId;
}
@Override
public String getMessage() {
return message;
}
}
@@ -0,0 +1,39 @@
package com.jero.modules.docking.iam.exception;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.docking.iam.dto.response.IamCommonResponseDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.data.redis.connection.PoolException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.NoHandlerFoundException;
/**
* IAM对接全局异常处理器
*/
@RestControllerAdvice
@Slf4j
public class IamGlobalExceptionHandler {
/**
* 处理自定义异常
*/
@ExceptionHandler(IamGlobalException.class)
public IamCommonResponseDto handleJeroBootException(IamGlobalException e){
IamCommonResponseDto iamCommonResponseDto = new IamCommonResponseDto();
iamCommonResponseDto.setBimRequestId(e.getBimRequestId());
iamCommonResponseDto.setResultCode("-1"); // 错误码统一为-1
iamCommonResponseDto.setMessage(e.getMessage());
return iamCommonResponseDto;
}
}
@@ -13,6 +13,6 @@ public class AcceptPoSystemPo<T> {
private MessageHeader messageHeader;
@JsonProperty("Tables")
private MessageTabels<T> messageTabels;
private MessageTabels messageTabels;
}
@@ -7,9 +7,9 @@ import lombok.Data;
* PO系统交互必须的实体,包含接口传递的正式数据(仅为套的一层壳)
*/
@Data
public class MessageTabels<T> {
public class MessageTabels {
@JsonProperty("Header")
private T header;
private MessageTabelsHeader header;
}
@@ -0,0 +1,15 @@
package com.jero.modules.docking.iam.po;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 接受数据的tables中的header层
*/
@Data
public class MessageTabelsHeader {
@JsonProperty("data")
private String data;
}
@@ -7,12 +7,12 @@ import lombok.Data;
* 和PO系统做数据交互的最外层壳,做数据发送用
*/
@Data
public class SendPoSystemPo<T> {
public class SendPoSystemPo {
@JsonProperty("MessageHeader")
private MessageHeader messageHeader;
@JsonProperty("Returns")
private T returns;
private SendReturnsPo returns;
}
@@ -0,0 +1,19 @@
package com.jero.modules.docking.iam.po;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 返回数据的Return层
*/
@Data
public class SendReturnsPo {
@JsonProperty("data")
private String data;
public SendReturnsPo(String data){
this.data = data;
}
}
@@ -0,0 +1,142 @@
package com.jero.modules.docking.iam.service;
import com.bamboocloud.codec.BamboocloudFacade;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jero.common.aspect.annotation.Translation;
import com.jero.common.util.DateUtils;
import com.jero.common.util.UUIDGenerator;
import com.jero.modules.docking.iam.annotation.IamProperty;
import com.jero.modules.docking.iam.dto.IamCommonAcceptDto;
import com.jero.modules.docking.iam.dto.IamOrgAcceptDto;
import com.jero.modules.docking.iam.dto.IamUserAcceptDto;
import com.jero.modules.docking.iam.dto.response.IamCommonResponseDto;
import com.jero.modules.docking.iam.dto.response.IamSchemaResponse;
import com.jero.modules.docking.iam.dto.response.SchemaResponseInner;
import com.jero.modules.docking.iam.exception.IamGlobalException;
import com.jero.modules.docking.iam.po.MessageHeader;
import com.jero.modules.docking.iam.po.SendPoSystemPo;
import com.jero.modules.docking.iam.po.SendReturnsPo;
import com.jero.modules.docking.utils.DockingConstant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* IAM对接业务处理类
*/
@Service
@Transactional
public class SyncIamService {
@Value("${iam.bimRemoteUser}")
private String bimRemoteUser;
@Value("${iam.bimRemotePwd}")
private String bimRemotePwd;
/**
* 校验IAM调用时的账号密码是否正确
* 校验通过了正常走后续,不通过直接返回
* @return
*/
public void validateUserAndPwd(IamCommonAcceptDto commonAcceptDto) {
if (!bimRemoteUser.equals(commonAcceptDto.getBimRemoteUser())
|| !bimRemotePwd.equals(commonAcceptDto.getBimRemotePwd())){
throw new IamGlobalException(commonAcceptDto.getBimRequestId(), "用户名或密码不对,无法调用接口");
}
}
/**
* 生成Schema的信息
* @return
*/
public IamSchemaResponse getSchemaInfo(IamCommonAcceptDto commonAcceptDto){
// 获取用户同步的字段
List<SchemaResponseInner> accountFiledList = new ArrayList<>();
Field[] userFields = IamUserAcceptDto.class.getDeclaredFields();
this.extractedFieldProperty(accountFiledList, userFields);
// 获取组织机构同步的字段
List<SchemaResponseInner> orgFiledList = new ArrayList<>();
Field[] orgFields = IamOrgAcceptDto.class.getDeclaredFields();
this.extractedFieldProperty(orgFiledList, orgFields);
IamSchemaResponse iamSchemaResponse = new IamSchemaResponse();
iamSchemaResponse.setAccount(accountFiledList);
iamSchemaResponse.setOrganization(orgFiledList);
iamSchemaResponse.setBimRequestId(commonAcceptDto.getBimRequestId());
return iamSchemaResponse;
}
/**
* 抽取含有IamProperty注解的字段元属性
* @param filedList
* @param fields
*/
private void extractedFieldProperty(List<SchemaResponseInner> filedList, Field[] fields) {
for (Field field : fields) {
if (field.isAnnotationPresent(IamProperty.class)) {
SchemaResponseInner schemaInfo = new SchemaResponseInner();
field.setAccessible(true);
//获取Annotation对象
IamProperty iamProperty = (IamProperty) field.getAnnotation(IamProperty.class);
//提取注解对象元数据
boolean required = iamProperty.required();
boolean multivalued = iamProperty.multivalued();
String name = field.getName();
String type = field.getType().getSimpleName();
schemaInfo.setName(name);
schemaInfo.setType(type);
schemaInfo.setRequired(required);
schemaInfo.setMultivalued(multivalued);
filedList.add(schemaInfo);
}
}
}
/**
* 处理统一响应PO层,并加密业务字段
* @param acceptMessageHeader
* @param iamSchemaResponse
* @return
* @throws JsonProcessingException
*/
public SendPoSystemPo handlerGloablResponse(MessageHeader acceptMessageHeader, IamSchemaResponse iamSchemaResponse) throws JsonProcessingException {
SendPoSystemPo sendPoSystemPo = new SendPoSystemPo();
MessageHeader sendMessageHeader = new MessageHeader();
sendMessageHeader.setInterfaceID(acceptMessageHeader.getInterfaceID());
sendMessageHeader.setUUID(UUIDGenerator.generate());
sendMessageHeader.setMessageId(UUIDGenerator.generate());
sendMessageHeader.setSender(DockingConstant.SYSTEM_NAME); // 固定值,即本系统
sendMessageHeader.setReceiver(DockingConstant.IAM_SYSTEM_NAME);
Date curDate = new Date();
sendMessageHeader.setSendDate(DateUtils.formatDate(curDate, "YYYYMMDD"));
sendMessageHeader.setSendTime(DateUtils.formatDate(curDate, "hhmmss"));
ObjectMapper objectMapper = new ObjectMapper();
String returnData = objectMapper.writeValueAsString(iamSchemaResponse);
// 加密PO层外的业务数据
String encryptData = BamboocloudFacade.encrypt(returnData, DockingConstant.IAM_ENCRYPT_SECRET, DockingConstant.IAM_ENCRYPT_TYPE);
sendPoSystemPo.setMessageHeader(sendMessageHeader);
sendPoSystemPo.setReturns(new SendReturnsPo(encryptData));
return sendPoSystemPo;
}
}
@@ -0,0 +1,84 @@
package com.jero.modules.docking.utils;//package com.jero.modules.iam;
import com.bamboocloud.codec.BamboocloudFacade;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@Slf4j
public class BamboocloudUtils {
public static void main(String[] args) {
String aes = BamboocloudFacade.encrypt("{\"uid\":\"104\",\"bimRequestId\":\"95d73fe7aa7a4930a3edea779708a46c\",\"resultCode\":\"0\",\"message\":\"success\"}", "123456", "AES");
System.out.println(aes);
String aes1 = getPlaintext("KJ3jbIflWkNiEq3oxE2d5oxtKRLO3CC7edGrq57RIB02RSRgPljiNcTfuWYLS3sc1tbZMLm5fWG2guLK100g9MkWH9NhlxorPSlcP8LaYuP5NeZ1wFP8iKqr5RredwXfDA3J1fjOCAJfzPvJ4HSb1w==", "123456", "AES");
System.out.println(aes1);
}
public static boolean checkUsernamePassword(String username, String password) {
log.info("username --->" + username + " password --- >" + password + " ----ok");
if("bbcadmin".equals(username)&&"P@ssw0rd".equals(password)) {
return true;
}
else {
return false;
}
}
public static String getPlaintext(String ciphertext, String key, String type) {
return BamboocloudFacade.decrypt(ciphertext, key, type);
}
public static Boolean verify(Map<String, Object> reqmap, String type) {
Map<String, Object> verifymap = new TreeMap<String, Object>();
StringBuffer sb = new StringBuffer();
Iterator<String> it = reqmap.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
verifymap.put(key, reqmap.get(key));
}
Iterator<String> ittree = verifymap.keySet().iterator();
while (ittree.hasNext()) {
String key = (String) ittree.next();
if (!"signature".equals(key)) {
sb.append(key).append("=").append(verifymap.get(key)).append("&");
}
}
sb.deleteCharAt(sb.length() - 1);
System.out.println(reqmap.get("signature") + " now " + sb.toString());
return BamboocloudFacade.verify(reqmap.get("signature").toString(), sb.toString(), type);
}
public static String getRequestBody(HttpServletRequest request) {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String str = "";
try {
br = request.getReader();
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
if (br != null) {
try {
br.close();
} catch (IOException eo) {
eo.printStackTrace();
}
}
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
}
@@ -0,0 +1,28 @@
package com.jero.modules.docking.utils;
/**
* 常量类
*/
public class DockingConstant {
/**
* 本系统名称
*/
public static String SYSTEM_NAME = "SRMS";
/**
* IAM系统名称
*/
public static String IAM_SYSTEM_NAME = "IAM";
/**
* IAM对称加密算法
*/
public static String IAM_ENCRYPT_TYPE = "AES";
/**
* IAM对称加密密钥
*/
public static String IAM_ENCRYPT_SECRET = "123456";
}
@@ -0,0 +1,44 @@
package com.jero.modules.docking.utils;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256Util {
public static void main(String[] args) {
String sha256StrJava = getSHA256StrJava("123456");
System.out.println(sha256StrJava);
}
/**
* 利用java原生的摘要实现SHA256加密密后的报文
*/
public static String getSHA256StrJava(String str) {
MessageDigest messageDigest;
String encodeStr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes(StandardCharsets.UTF_8));
encodeStr = byte2Hex(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return encodeStr;
}
/**
* 将byte转为16进制
*/
private static String byte2Hex(byte[] bytes) {
StringBuilder stringBuffer = new StringBuilder();
String temp;
for (byte aByte : bytes) {
temp = Integer.toHexString(aByte & 0xFF);
if (temp.length() == 1) {
//1得到一位的进行补0操作
stringBuffer.append("0");
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
}
}
@@ -358,33 +358,6 @@ justauth:
type: default
prefix: 'demo::'
timeout: 1h
# 云端OCR识别集成配置参数
OCR:
#请求OCR转换接口
# handleFileUrl: https://sws.trans-cosmos.com.cn/WebService.asmx/FileConversion
handleFileUrl: http://61.136.1.103:8091/WebService.asmx/FileConversion
# OCR回调接口地址 配置客户本地的IP及端口号
# callBackUrl: http://139.9.235.66:9110//api/ocr/OCRRestful/OcrHandleResult
callBackUrl: http://139.9.235.66:9022/local-tool/ocr/ocrHandleResult
# OCR认证用户
userId: dayuzhou1234
# OCR认证编码
authCode: 123456
# OCR接口公钥
publicKey: EC4KKA6ZDTCPAOCRBC5M
# OCR文件存储路径
ocrPath: /ocrFiles/
#ocrPath: /data/DeploymentPackage/laws-shanqi/APPSOFT/LAWSOCRDEMO/OCRFILE/
# OCR文件下载地址(onlyoffice专用)
ocrDownPath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/downFile
# OCR文件保存地址(onlyoffice专用)
ocrSavePath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/saveFile
# OCR文件编辑失败返回列表页(onlyoffice专用)
serverUrl: http://10.0.1.25:3000/docManage/ocr
# OCR接口超时时间
times: 20
# OCR转换类型
convertType: BOTH
file:
downloadUrl: a
@@ -392,3 +365,7 @@ file:
path: D://opt//onlyoffice//file//splitImage/
sourceFilePath: D://opt//onlyoffice//sourceFile//DOCX.docx
path: D://opt//onlyoffice//file//
iam:
bimRemoteUser: srmsIam
bimRemotePwd: srmsIam2023
@@ -335,33 +335,6 @@ justauth:
type: default
prefix: 'demo::'
timeout: 1h
# 云端OCR识别集成配置参数
OCR:
#请求OCR转换接口
# handleFileUrl: https://sws.trans-cosmos.com.cn/WebService.asmx/FileConversion
handleFileUrl: http://61.136.1.103:8091/WebService.asmx/FileConversion
# OCR回调接口地址 配置客户本地的IP及端口号
# callBackUrl: http://139.9.235.66:9110//api/ocr/OCRRestful/OcrHandleResult
callBackUrl: http://139.9.235.66:9022/local-tool/ocr/ocrHandleResult
# OCR认证用户
userId: dayuzhou1234
# OCR认证编码
authCode: 123456
# OCR接口公钥
publicKey: EC4KKA6ZDTCPAOCRBC5M
# OCR文件存储路径
ocrPath: /ocrFiles/
#ocrPath: /data/DeploymentPackage/laws-shanqi/APPSOFT/LAWSOCRDEMO/OCRFILE/
# OCR文件下载地址(onlyoffice专用)
ocrDownPath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/downFile
# OCR文件保存地址(onlyoffice专用)
ocrSavePath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/saveFile
# OCR文件编辑失败返回列表页(onlyoffice专用)
serverUrl: http://10.0.1.25:3000/docManage/ocr
# OCR接口超时时间
times: 20
# OCR转换类型
convertType: BOTH
file:
downloadUrl: a