From d4db32b399cc88bf2b75661da03ec9eea8198ee3 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Sat, 18 Sep 2021 15:26:34 +0800
Subject: [PATCH 1/8] =?UTF-8?q?fix=EF=BC=9A=E6=96=B0=E5=BB=BAcontract?=
 =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../seaskyocr/api/IContractController.java    | 27 +++++++++
 .../dto/contract/ContractRequestCmd.java      | 24 ++++++++
 .../dto/contract/CreateContractCmd.java       | 29 ++++++++++
 .../seasky/seaskyocr/enums/MethodEnum.java    | 26 ++++++++-
 .../seasky/seaskyocr/enums/SupplierEnum.java  | 24 ++++++++
 ServiceSite/pom.xml                           |  5 ++
 .../{account => assembler}/TestAssembler.java |  2 +-
 .../contract/HeHeContractAssembler.java       | 15 +++++
 .../command/contract/ContractCmdService.java  | 20 +++++++
 .../contract/ContractCmdServiceImpl.java      | 43 ++++++++++++++
 .../contract/ContractAggregate.java           | 48 ++++++++++++++-
 .../ocrimplement/contract/ContractVO.java     | 30 ++++++++++
 .../OcrFactory/Product/IHeHeProduct.java      |  4 +-
 .../dataobject/po/contract/ContractPO.java    | 58 ++++++++++++++++++-
 .../controller/ContractController.java        | 35 +++++++++++
 ServiceSite/src/main/resources/aaaa.txt       |  1 +
 16 files changed, 385 insertions(+), 6 deletions(-)
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/{account => assembler}/TestAssembler.java (63%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
 create mode 100644 ServiceSite/src/main/resources/aaaa.txt

diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
new file mode 100644
index 00000000..92b8adeb
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
@@ -0,0 +1,27 @@
+package com.seasky.seaskyocr.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:18
+ */
+@RequestMapping("contract")
+public interface IContractController {
+
+    /**
+     * 浠栫殑鍚堝悓
+     * 鍒涘缓浠栫殑鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @param file              鏂囦欢
+     * @return {@link Result<Long>}
+     */
+    @PostMapping(path = "HeHeContract")
+    Result<Long> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
new file mode 100644
index 00000000..6ec90672
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
@@ -0,0 +1,24 @@
+package com.seasky.seaskyocr.dto.contract;
+
+import com.seasky.core.ddd.base.BaseDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ContractRequestCmd extends BaseDto {
+
+    private String body;
+
+    private String head;
+
+    private String parameter;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
new file mode 100644
index 00000000..8438eac0
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.dto.contract;
+
+import com.seasky.core.ddd.base.BaseDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateContractCmd extends BaseDto {
+
+    private Long accountId;
+
+    private String methodEnum;
+
+    private String supplierEnum;
+
+    private List<String> addField;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
index 0d9172fe..de49ff6d 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
@@ -1,4 +1,28 @@
 package com.seasky.seaskyocr.enums;
 
-public class MethodEnum {
+/**
+ * 鏂规硶鏋氫妇
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
+public enum MethodEnum {
+
+    鍚堝悓("鍚堝悓","1");
+
+    final String k;
+    final String v;
+
+    MethodEnum(final String k,final String v) {
+        this.k = k;
+        this.v = v;
+    }
+
+    public String val() {
+        return v;
+    }
+
+    public String key() {
+        return k;
+    }
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
index 1538afed..1471d5db 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
@@ -1,4 +1,28 @@
 package com.seasky.seaskyocr.enums;
 
+/**
+ * 渚涘簲鍟嗘灇涓�
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
 public enum SupplierEnum {
+
+    鍚堝悎("鍚堝悎","1");
+
+    final String k;
+    final String v;
+
+    SupplierEnum(final String k,final String v) {
+        this.k = k;
+        this.v = v;
+    }
+
+    public String val() {
+        return v;
+    }
+
+    public String key() {
+        return k;
+    }
 }
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index 9de4d664..cbc09524 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -76,6 +76,11 @@
             <artifactId>dddtemplate-api</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.seasky</groupId>
+            <artifactId>dddtemplate-api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
similarity index 63%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
index d5f1bfdb..9bb1db82 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
@@ -1,4 +1,4 @@
-package com.seasky.seaskyocr.application.command.account;
+package com.seasky.seaskyocr.application.command.assembler;
 
 
 /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
new file mode 100644
index 00000000..bcf498a1
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
@@ -0,0 +1,15 @@
+package com.seasky.seaskyocr.application.command.assembler.contract;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 11:02
+ */
+public class HeHeContractAssembler {
+
+    public static ContractVO buildHeHeVo(CreateContractCmd heHeContractCmd){
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
new file mode 100644
index 00000000..657d0b67
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
@@ -0,0 +1,20 @@
+package com.seasky.seaskyocr.application.command.contract;
+
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:32
+ */
+public interface ContractCmdService {
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @param file              鏂囦欢
+     * @return {@link Long}
+     */
+    Long createContract(MultipartFile file, CreateContractCmd createContractCmd);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
new file mode 100644
index 00000000..5c802740
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -0,0 +1,43 @@
+package com.seasky.seaskyocr.application.command.contract;
+
+import com.seasky.seaskyocr.domain.service.OcrFactory.IOcrFactory;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Encoder;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:34
+ */
+@Service
+public class ContractCmdServiceImpl implements ContractCmdService {
+
+    @Autowired
+    IOcrFactory iOcrFactory;
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @return {@link Long}
+     */
+    @Override
+    public Long createContract(MultipartFile file, CreateContractCmd createContractCmd) {
+        IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+        try {
+            byte[] bytes = file.getBytes();
+            String encode = new BASE64Encoder().encode(bytes);
+            String hashId = String.valueOf(encode.hashCode());
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
index 046cbf8b..ce70ec35 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
@@ -13,5 +13,51 @@ import lombok.Data;
 @Builder
 @Data
 public class ContractAggregate extends BaseOcrImplementAggregate {
-    public Long id;
+
+    /**
+     * 鍚堝悓id
+     */
+    private Long id;
+
+    /**
+     * 璐︽埛id
+     */
+    private Long accountId;
+
+    /**
+     * 鍚堝悓浠g爜
+     */
+    private String contractCode;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    private String contractName;
+
+    /**
+     * 鍐呭
+     */
+    private String content;
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param accountId 甯愭埛id
+     */
+    public void create(Long accountId){
+        this.accountId = accountId;
+    }
+
+    /**
+     * 淇敼鍚堝悓
+     *
+     * @param contractCode 鍚堝悓浠g爜
+     * @param contractName 鍚堝悓鍚嶇О
+     */
+    public void modify(String contractCode, String contractName, String hashId){
+        this.contractCode = contractCode;
+        this.contractName = contractName;
+        this.hashId = hashId;
+    }
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
index e2a8067f..1249f482 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
@@ -7,4 +7,34 @@ package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
  * @date 2021/09/17
  */
 public class ContractVO {
+
+    /**
+     * 鍚堝悓id
+     */
+    private Long id;
+
+    /**
+     * 璐︽埛id
+     */
+    private Long accountId;
+
+    /**
+     * 鏁e垪id
+     */
+    private String hashId;
+
+    /**
+     * 鍚堝悓浠g爜
+     */
+    private String contractCode;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    private String contractName;
+
+    /**
+     * 鍐呭
+     */
+    private String content;
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
index 35a28843..3d3f0a54 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
@@ -17,7 +17,7 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggreg
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
+    String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
 
 
     /**
@@ -26,5 +26,5 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggreg
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
+    String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
index 71467dca..1dbcebe3 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
@@ -1,4 +1,60 @@
 package com.seasky.seaskyocr.infrastructure.dataobject.po.contract;
 
-public class ContractPO {
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鍚堝悓璁㈠崟
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_contract",autoResultMap = true)
+public class ContractPO extends BaseDataObject {
+
+    /**
+     * 涓婚敭id
+     */
+    @TableField("id")
+    private Long id;
+
+    /**
+     * 甯愭埛id
+     */
+    @TableField("account_id")
+    private Long accountId;
+
+    /**
+     * 鏁e垪id
+     */
+    @TableField("hash_id")
+    private String hashId;
+
+    /**
+     * 鍚堝悓浠g爜
+     */
+    @TableField("contract_code")
+    private String contractCode;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    @TableField("contract_name")
+    private String contractName;
+
+    /**
+     * 鍐呭
+     */
+    @TableField("content")
+    private String content;
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
new file mode 100644
index 00000000..0cc821ae
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
@@ -0,0 +1,35 @@
+package com.seasky.seaskyocr.interfaces.controller;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.api.IContractController;
+import com.seasky.seaskyocr.application.command.contract.ContractCmdService;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import static com.seasky.core.common.Response.ok;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:17
+ */
+@Api(tags = "鍚堝悓绠$悊")
+@RestController
+@RequestMapping("contractCtrl")
+public class ContractController extends BaseController implements IContractController {
+    @Autowired
+    ContractCmdService contractCmdService;
+
+    @ApiOperation("鍒涘缓鍚堝悓")
+    @Override
+    public Result<Long> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
+        return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
+    }
+}
diff --git a/ServiceSite/src/main/resources/aaaa.txt b/ServiceSite/src/main/resources/aaaa.txt
new file mode 100644
index 00000000..0221142d
--- /dev/null
+++ b/ServiceSite/src/main/resources/aaaa.txt
@@ -0,0 +1 @@
+data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PLTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAOpA4sDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3qiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDgZF0fUrzW2tdf8Ry3thK5udPtL5/MQ56JHn7p7Y47Vj/aIv+fP4mfm/wD8VWlPd6HpN9rkdv4e8URX19K4udRstLlZ3OeqSBSNo7Y479axfMtf+fr4p/8AgNP/APEUAeq6eAum2qj7RgQoP9JOZeg+/wD7Xr71Zqtp5DabasPtGDCh/wBJGJeg+/8A7Xr71ZoAKqC9zq72Hl/dgWbfu9WIxj8Kt1jXOjQX3iBrm9sbe5txaqiGZFcBtzE4B6cEUdQ6Eq65bqb37SDEttci2XGXaViqsMKBkn5ugz0p7a7pq2sdwbgiN5TCo8p9/mAE7CuNwbg8EZ6eorEi0O4sL2S6tLFBDBqBnitoiib42hCEryACDk4OOh9amGmX015FevbeUZNTW4aIupaONYimWIOCSQDgE9aF0+X6A+vz/U0ofEWl3EscUc7lnk8oZgkAV+RsYlcK3H3Tg9PUVLHrNhLdi2SZi7MUVvKcIzDqqvjaSMHgHPB9DWY2l3ZtpkEPzPqq3I+Ycxh1O7r6Dp1qrpWiSWptbW40+8lNtLkXD6g3kEKSVYR7zz0+XaBnPNNa/wBegP8Ar8TrKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVyeveJLuz1NrW1CKsWNxZcliRn8ua6e5ErWkwgOJSjBD/ALWOP1rzaKwvZL7Z9kZ2LbZt6HKr3PsferjUhSTqTV7LY0+oTxdGXs6nI0ehaXenUNNhumTYzg5X0IOD/KrlZGiwtCGVUKQhcAY4zWvXNQr+3h7S1rkOm6doSd2gooorYRw+ueJ9Uu/E6eHNAeGGcf625lAODjJABBHA9jzTNL8TatpfihfD/iGSG4aXHlXMSheT0BAA4PTp19ar6p4ahs/GM2r3h1BbOb95HPYgloZO+7aCwHoQO9Ms/DcGp+LrPVLGTUZLWFhLPc3oI8xh90JuAY+/GBinDpf5hLrb5Ho1Ztzr2nWk7QzTuCjKkjrC7JGzYwGcDap5HUjqK0q5DXdP1jUPt0X2e7ny4+zbLlI4FT5TyAQzNkHhgR6EUluHQ1tX8SWelRzD5pp4toKKjbQT0DOAVU45wTnp61LN4i0q3mkiluSpjk8uRvKfajYzgtjAJ7ZPPasjUdP1JbTVrG2sGuRez+ek3mIqqDtyGyc5G04wCOnIqd9KvGgv08jPm6rFcINy8xhoyT1/2Tx14oXT+uwP+vxNFdctJTCIX5e5FuyzI8bq20tjaVznHPOB70trr+m3lxHDBOzNIWEZMLqrkdQGIwSOeAc8Gs650u8k1z7SsOYv7Qim3bh9wQlSevqcUyz0q9isdDjeHD2t3JJMN6/KpEmD15+8OnrQv6/AH/X4nTUUUUARwTxXMKzQuHjboR/nrRBPFcxCWFw8ZJAYdDg44qlcaRHPOzrNLFFKf9IhQ4Wb69x6HGMjg1oKqooVQFUDAAHAFAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAM+zD+9J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aX7Mv95/++z/AI1PRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k=
\ No newline at end of file
-- 
GitLab


From a48bc28afb4be120fe97b3bab6e979dc2608d2e6 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Sat, 18 Sep 2021 15:59:38 +0800
Subject: [PATCH 2/8] =?UTF-8?q?fix=EF=BC=9A=E9=85=8D=E7=BD=AEnacos?=
 =?UTF-8?q?=EF=BC=8C=E8=BF=9E=E6=8E=A5=E6=95=B0=E6=8D=AE=E5=BA=93=EF=BC=8C?=
 =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99=E9=A1=B9=E7=9B=AE=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ServiceSite/facade/pom.xml                    |   6 +-
 .../seasky/seaskyocr/api/ITestController.java |  41 -------
 ServiceSite/pom.xml                           |   2 +-
 .../src/main/java/com/seasky/Application.java |   6 +-
 .../domain/service/OcrFactory/OcrFactory.java |   2 +
 .../ProductImpl/AliProductImpl.java           |   2 +
 .../ProductImpl/HeHeProductImpl.java          |   2 +
 .../repository/ocr/OcrRepositoryImpl.java     |   5 -
 .../repository/test/TestConvert.java          |  35 ------
 .../repository/test/TestRepositoryImpl.java   |  16 ---
 .../interfaces/controller/TestController.java | 102 ------------------
 .../seaskyocr/interfaces/soap/SOAPConfig.java |  65 -----------
 .../interfaces/soap/TestWebService.java       |  26 -----
 ServiceSite/src/main/resources/aaaa.txt       |   1 -
 .../main/resources/application-dev.properties |  80 +++++++-------
 .../src/main/resources/application.properties |  66 ++++++------
 ServiceSite/src/main/resources/bootstrap.yml  |   8 +-
 17 files changed, 88 insertions(+), 377 deletions(-)
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
 delete mode 100644 ServiceSite/src/main/resources/aaaa.txt

diff --git a/ServiceSite/facade/pom.xml b/ServiceSite/facade/pom.xml
index f591031d..f0275bf6 100644
--- a/ServiceSite/facade/pom.xml
+++ b/ServiceSite/facade/pom.xml
@@ -3,10 +3,10 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>com.seasky</groupId>
-	<artifactId>dddtemplate-api</artifactId>
+	<artifactId>seasky-ocr-api</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
-	<name>dddtemplate-api</name>
-	<description>dddtemplate-api project for dddtemplate</description>
+	<name>seasky-ocr-api</name>
+	<description>seasky-ocr-api project for dddtemplate</description>
 
 	<properties>
 		<java.version>1.8</java.version>
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
deleted file mode 100644
index c48edbf0..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.seasky.seaskyocr.api;
-
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.dto.ocr.TestCmd;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.io.UnsupportedEncodingException;
-
-@FeignClient("dddtemplate-provider")
-@RequestMapping("test")
-@Api("Test")
-public interface ITestController {
-
-    @ApiOperation("1.testQ")
-    @PostMapping(path = "/pc/v1/queryList")
-    Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry);
-
-    @ApiOperation("2.testExport")
-    @PostMapping(path = "/pc/v1/export")
-    ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException;
-
-    @ApiOperation("3.testSave")
-    @PostMapping(path = "/pc/v1/save")
-    Result<Long> testSave(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("4.testSubmit")
-    @PostMapping(path = "/pc/v1/submit")
-    Result<Long> testSubmit(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("5.testSaveAndSubmit")
-    @PostMapping(path = "/pc/v1/saveandsubmit")
-    Result<Long> testSaveAndSubmit(@RequestBody TestCmd testCmd);
-}
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index cbc09524..3ffac870 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -73,7 +73,7 @@
         </dependency>
         <dependency>
             <groupId>com.seasky</groupId>
-            <artifactId>dddtemplate-api</artifactId>
+            <artifactId>seasky-ocr-api</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
diff --git a/ServiceSite/src/main/java/com/seasky/Application.java b/ServiceSite/src/main/java/com/seasky/Application.java
index a3456b84..89aa62c5 100644
--- a/ServiceSite/src/main/java/com/seasky/Application.java
+++ b/ServiceSite/src/main/java/com/seasky/Application.java
@@ -10,13 +10,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
 /***
  * @author bandi
  * */
-@SpringBootApplication
+@SpringBootApplication(exclude = {org.apache.shiro.spring.boot.autoconfigure.ShiroAnnotationProcessorAutoConfiguration.class})
 @EnableAspectJAutoProxy(exposeProxy = true)
 @EnableDiscoveryClient
-@EnableFeignClients(basePackages = {
-        "com.seasky.some-api"
-        ,"com.seasky.other-api"
-})
 @EnableAsync
 public class Application {
 
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
index fdd2e3c6..f598417e 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
@@ -2,6 +2,7 @@ package com.seasky.seaskyocr.domain.service.OcrFactory;
 
 import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
 import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 
@@ -11,6 +12,7 @@ import javax.annotation.Resource;
  * @author bandi
  * @date 2021/09/17
  */
+@Component
 public class OcrFactory implements IOcrFactory {
 
      @Resource
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
index 7439d35b..eeed46e4 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
@@ -2,6 +2,7 @@ package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
 
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
+import org.springframework.stereotype.Service;
 
 
 /**
@@ -10,6 +11,7 @@ import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
  * @author bandi
  * @date 2021/09/17
  */
+@Service
 class AliProductImpl implements IAliProduct {
     @Override
     public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
index 6c61f1c3..86a27e44 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
@@ -2,6 +2,7 @@ package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
 
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import org.springframework.stereotype.Service;
 
 /**
  * 鍚堝悎浜у搧impl
@@ -9,6 +10,7 @@ import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
  * @author bandi
  * @date 2021/09/17
  */
+@Service
 class HeHeProductImpl implements IHeHeProduct {
     @Override
     public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index 37ca738c..c5aac1f9 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -15,9 +15,4 @@ public class OcrRepositoryImpl implements BaseOcrRepository {
 
     }
 
-    @Override
-    public void remove(Long id) {
-
-    }
-
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
deleted file mode 100644
index db9e9e8d..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.test;
-
-
-import com.seasky.core.ddd.utils.MapperUtils;
-import com.seasky.seaskyocr.domain.aggregate.test.TestAggregate;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.OcrInfoPO;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 绀轰緥杞崲
- *
- * @author XueYawei
- * @date 2020/12/08
- */
-public class TestConvert {
-
-
-    /**
-     * 绀轰緥鑱氬悎鏍硅浆涓虹ず渚婸o绫�
-     *
-     * @param testAggregate 绀轰緥鑱氬悎鏍�
-     * @return {@link OcrInfoPO}
-     */
-    public static OcrInfoPO TestAggregateToTestPo(TestAggregate testAggregate){
-        //杞崲瀵瑰簲閿€糾ap
-        Map<String, String> map = new HashMap<>(3);
-        OcrInfoPO testPo = MapperUtils.INSTANCE.map(OcrInfoPO.class, testAggregate);
-
-        return testPo;
-    }
-
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
deleted file mode 100644
index dd953009..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.test;
-
-
-import org.springframework.stereotype.Repository;
-
-/**
- * 绀轰緥impl
- *
- * @author XueYawei
- * @date 2020/12/07
- */
-@Repository
-public class TestRepositoryImpl{
-
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
deleted file mode 100644
index 63e6515b..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.seasky.seaskyocr.interfaces.controller;
-
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.api.ITestController;
-import com.seasky.seaskyocr.application.command.ocr.TestCmdService;
-import com.seasky.seaskyocr.application.query.TestQueryService;
-import com.seasky.seaskyocr.dto.ocr.TestCmd;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.List;
-
-import static com.seasky.core.common.Response.ok;
-
-/**
- * 绀轰緥API
- *
- * @author XueYawei
- * @date 2020/12/07
- */
-@RestController
-@RequestMapping("test")
-public class TestController extends BaseController implements ITestController {
-
-    @Autowired
-    private TestCmdService testApplicationCmdService;
-    @Autowired
-    private TestQueryService testQueryService;
-
-    /**
-     * 鏌ヨ绀轰緥
-     *
-     * @param testQry
-     * @return {@link Result<TestQueryOut>}
-     */
-    @Override
-    public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){
-        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
-    }
-
-    /**
-     * 瀵煎嚭
-     * 涓巘estQ鍚屾牱鑾峰彇鏁版嵁,浣嗚浆鎹㈡垚涓嶅悓鏁版嵁鏍煎紡杩斿洖
-     *
-     * @param testQry
-     * @return {@link ResponseEntity<byte[]>}
-     */
-    @Override
-    public ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException {
-        List<TestQueryOut> list = testQueryService.queryTestList(testQry);
-
-        byte[] excelbyte = null; // 姝ゅ璋冪敤excel宸ュ叿绫昏浆鎴恊xcel
-        HttpHeaders header = new HttpHeaders();
-        header.add("Content-Length", "0");
-        header.add("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode("xxxnanme", "UTF-8"));
-        return new ResponseEntity<>(excelbyte, header, HttpStatus.OK);
-    }
-
-    /**
-     * 淇濆瓨鑽夌ǹ
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSave(TestCmd testCmd) {
-        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SaveTest(testCmd));
-    }
-
-    /**
-     * 鎻愪氦
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSubmit(TestCmd testCmd) {
-        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SubmitTest(testCmd));
-    }
-
-    /**
-     * 淇濆瓨骞舵彁浜�
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSaveAndSubmit(TestCmd testCmd) {
-        return  ok(ResponseCode.SUCCESS, testApplicationCmdService.SavaAndSubmitTest(testCmd));
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
deleted file mode 100644
index a39c490c..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.seasky.seaskyocr.interfaces.soap;
-
-import com.seasky.seaskyocr.api.ITestWebService;
-import org.apache.cxf.Bus;
-import org.apache.cxf.bus.spring.SpringBus;
-import org.apache.cxf.jaxws.EndpointImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.xml.ws.Endpoint;
-
-
-@Configuration
-public class SOAPConfig {
-    @Autowired
-    private ITestWebService testWebServiceImpl;
-
-    @Autowired
-    private ITestWebService test2WebServiceImpl;
-
-    /**
-     * Apache CXF 鏍稿績鏋舵瀯鏄互BUS涓烘牳蹇冿紝鏁村悎鍏朵粬缁勪欢銆�
-     * Bus鏄疌XF鐨勪富骞�, 涓哄叡浜祫婧愭彁渚涗竴涓彲閰嶇疆鐨勫満鎵€锛屼綔鐢ㄧ被浼间簬Spring鐨凙pplicationContext锛岃繖浜涘叡浜祫婧愬寘鎷�
-     * WSDl绠$悊鍣ㄣ€佺粦瀹氬伐鍘傜瓑銆傞€氳繃瀵笲US杩涜鎵╁睍锛屽彲浠ユ柟渚垮湴瀹圭撼鑷繁鐨勮祫婧愶紝鎴栬€呮浛鎹㈢幇鏈夌殑璧勬簮銆傞粯璁us瀹炵幇鍩轰簬Spring鏋舵瀯锛�
-     * 閫氳繃渚濊禆娉ㄥ叆锛屽湪杩愯鏃跺皢缁勪欢涓茶仈璧锋潵銆侭usFactory璐熻矗Bus鐨勫垱寤恒€傞粯璁ょ殑BusFactory鏄疭pringBusFactory锛屽搴斾簬榛樿
-     * 鐨凚us瀹炵幇銆傚湪鏋勯€犺繃绋嬩腑锛孲pringBusFactory浼氭悳绱ETA-INF/cxf锛堝寘鍚湪 CXF 鐨刯ar涓級涓嬬殑鎵€鏈塨ean閰嶇疆鏂囦欢銆�
-     * 鏍规嵁杩欎簺閰嶇疆鏂囦欢鏋勫缓涓€涓狝pplicationContext銆傚紑鍙戣€呬篃鍙互鎻愪緵鑷繁鐨勯厤缃枃浠舵潵瀹氬埗Bus銆�
-     */
-    @Bean(name = Bus.DEFAULT_BUS_ID)
-    public SpringBus springBus() {
-        return new SpringBus();
-    }
-
-    /**
-     * 姝ゆ柟娉曚綔鐢ㄦ槸鏀瑰彉椤圭洰涓湇鍔″悕鐨勫墠缂€鍚嶏紝姝ゅ127.0.0.1鎴栬€卨ocalhost涓嶈兘璁块棶鏃讹紝璇蜂娇鐢╥pconfig鏌ョ湅鏈満ip鏉ヨ闂�
-     * 姝ゆ柟娉曡娉ㄩ噴鍚�, 鍗充笉鏀瑰彉鍓嶇紑鍚�(榛樿鏄痵ervices), wsdl璁块棶鍦板潃涓� http://127.0.0.1:8080/services/ws/api?wsdl
-     * 鍘绘帀娉ㄩ噴鍚巜sdl璁块棶鍦板潃涓猴細http://127.0.0.1:8080/soap/ws/api?wsdl
-     * http://127.0.0.1:8080/soap/鍒楀嚭鏈嶅姟鍒楄〃 鎴� http://127.0.0.1:8080/soap/ws/api?wsdl 鏌ョ湅瀹為檯鐨勬湇鍔�
-     * 鏂板缓Servlet璁板緱闇€瑕佸湪鍚姩绫绘坊鍔犳敞瑙o細@ServletComponentScan
-     *
-     * 濡傛灉鍚姩鏃跺嚭鐜伴敊璇細not loaded because DispatcherServlet Registration found non dispatcher servlet dispatcherServlet
-     * 鍙兘鏄痵pringboot涓巆fx鐗堟湰涓嶅吋瀹广€�
-     * 鍚屾椂鍦╯pring boot2.0.6涔嬪悗鐨勭増鏈笌xcf闆嗘垚锛屼笉闇€瑕佸湪瀹氫箟浠ヤ笅鏂规硶锛岀洿鎺ュ湪application.properties閰嶇疆鏂囦欢涓坊鍔狅細
-     * cxf.path=/service锛堥粯璁ゆ槸services锛�
-     */
-    //@Bean
-    //public ServletRegistrationBean dispatcherServlet() {
-    //    return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
-    //}
-
-    @Bean
-    public Endpoint testendpoint() {
-        EndpointImpl endpoint = new EndpointImpl(springBus(), testWebServiceImpl);
-        endpoint.publish("/ws/api");
-        return endpoint;
-    }
-
-    @Bean
-    public Endpoint test2endpoint() {
-        EndpointImpl endpoint = new EndpointImpl(springBus(), test2WebServiceImpl);
-        endpoint.publish("/ws/api2");
-        return endpoint;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
deleted file mode 100644
index f784a9cf..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.seasky.seaskyocr.interfaces.soap;
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.api.ITestWebService;
-import com.seasky.seaskyocr.application.query.TestQueryService;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.jws.WebService;
-import static com.seasky.core.common.Response.ok;
-
-@Component
-@WebService(name = "TestService", targetNamespace = "http://www.seaskysh.com",
-        endpointInterface = "com.seasky.dddtemplate.api.ITestWebService")
-public class TestWebService implements ITestWebService {
-    @Autowired
-    private TestQueryService testQueryService;
-
-    @Override
-    public Result<TestQueryOut> testQ(TestQueryQry testQry) {
-        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
-    }
-}
diff --git a/ServiceSite/src/main/resources/aaaa.txt b/ServiceSite/src/main/resources/aaaa.txt
deleted file mode 100644
index 0221142d..00000000
--- a/ServiceSite/src/main/resources/aaaa.txt
+++ /dev/null
@@ -1 +0,0 @@
-data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PLTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAOpA4sDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3qiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDgZF0fUrzW2tdf8Ry3thK5udPtL5/MQ56JHn7p7Y47Vj/aIv+fP4mfm/wD8VWlPd6HpN9rkdv4e8URX19K4udRstLlZ3OeqSBSNo7Y479axfMtf+fr4p/8AgNP/APEUAeq6eAum2qj7RgQoP9JOZeg+/wD7Xr71Zqtp5DabasPtGDCh/wBJGJeg+/8A7Xr71ZoAKqC9zq72Hl/dgWbfu9WIxj8Kt1jXOjQX3iBrm9sbe5txaqiGZFcBtzE4B6cEUdQ6Eq65bqb37SDEttci2XGXaViqsMKBkn5ugz0p7a7pq2sdwbgiN5TCo8p9/mAE7CuNwbg8EZ6eorEi0O4sL2S6tLFBDBqBnitoiib42hCEryACDk4OOh9amGmX015FevbeUZNTW4aIupaONYimWIOCSQDgE9aF0+X6A+vz/U0ofEWl3EscUc7lnk8oZgkAV+RsYlcK3H3Tg9PUVLHrNhLdi2SZi7MUVvKcIzDqqvjaSMHgHPB9DWY2l3ZtpkEPzPqq3I+Ycxh1O7r6Dp1qrpWiSWptbW40+8lNtLkXD6g3kEKSVYR7zz0+XaBnPNNa/wBegP8Ar8TrKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVyeveJLuz1NrW1CKsWNxZcliRn8ua6e5ErWkwgOJSjBD/ALWOP1rzaKwvZL7Z9kZ2LbZt6HKr3PsferjUhSTqTV7LY0+oTxdGXs6nI0ehaXenUNNhumTYzg5X0IOD/KrlZGiwtCGVUKQhcAY4zWvXNQr+3h7S1rkOm6doSd2gooorYRw+ueJ9Uu/E6eHNAeGGcf625lAODjJABBHA9jzTNL8TatpfihfD/iGSG4aXHlXMSheT0BAA4PTp19ar6p4ahs/GM2r3h1BbOb95HPYgloZO+7aCwHoQO9Ms/DcGp+LrPVLGTUZLWFhLPc3oI8xh90JuAY+/GBinDpf5hLrb5Ho1Ztzr2nWk7QzTuCjKkjrC7JGzYwGcDap5HUjqK0q5DXdP1jUPt0X2e7ny4+zbLlI4FT5TyAQzNkHhgR6EUluHQ1tX8SWelRzD5pp4toKKjbQT0DOAVU45wTnp61LN4i0q3mkiluSpjk8uRvKfajYzgtjAJ7ZPPasjUdP1JbTVrG2sGuRez+ek3mIqqDtyGyc5G04wCOnIqd9KvGgv08jPm6rFcINy8xhoyT1/2Tx14oXT+uwP+vxNFdctJTCIX5e5FuyzI8bq20tjaVznHPOB70trr+m3lxHDBOzNIWEZMLqrkdQGIwSOeAc8Gs650u8k1z7SsOYv7Qim3bh9wQlSevqcUyz0q9isdDjeHD2t3JJMN6/KpEmD15+8OnrQv6/AH/X4nTUUUUARwTxXMKzQuHjboR/nrRBPFcxCWFw8ZJAYdDg44qlcaRHPOzrNLFFKf9IhQ4Wb69x6HGMjg1oKqooVQFUDAAHAFAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAM+zD+9J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf99n/ABqxRQBX+zD+/J/32f8AGj7MP78n/fZ/xqxRQBX+zD+/J/32f8aPsw/vyf8AfZ/xqxRQBX+zD+/J/wB9n/Gj7MP78n/fZ/xqxRQBX+zD+/J/32f8aX7Mv95/++z/AI1PRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k=
\ No newline at end of file
diff --git a/ServiceSite/src/main/resources/application-dev.properties b/ServiceSite/src/main/resources/application-dev.properties
index d7c63f5c..33fd3233 100644
--- a/ServiceSite/src/main/resources/application-dev.properties
+++ b/ServiceSite/src/main/resources/application-dev.properties
@@ -1,40 +1,40 @@
-spring.redis.host=47.110.127.118
-spring.redis.port=6379
-spring.redis.password=123456
-spring.redis.database=0
-spring.redis.lettuce.pool.max-active=50
-spring.redis.lettuce.pool.max-idle=20
-spring.redis.lettuce.pool.min-idle=10
-spring.redis.lettuce.pool.max-wait=5000
-spring.redis.lettuce.pool.time-between-eviction-runs=600000
-
-spring.datasource.druid.write.name=write
-spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-spring.datasource.druid.write.username=root
-spring.datasource.druid.write.password=12345678
-spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.druid.write.initial-size=1
-spring.datasource.druid.write.min-idle=1
-spring.datasource.druid.write.max-active=5
-spring.datasource.druid.write.validation-query=SELECT 1
-spring.datasource.druid.write.validation-query-timeout=1
-spring.datasource.druid.write.test-while-idle=true
-spring.datasource.druid.write.test-on-borrow=true
-spring.datasource.druid.write.test-on-return=false
-spring.datasource.druid.write.keep-alive=true
-spring.datasource.druid.read.name=read
-spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-spring.datasource.druid.read.username=root
-spring.datasource.druid.read.password=12345678
-spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.druid.read.initial-size=1
-spring.datasource.druid.read.min-idle=1
-spring.datasource.druid.read.max-active=5
-spring.datasource.druid.read.validation-query=SELECT 1
-spring.datasource.druid.read.validation-query-timeout=1
-spring.datasource.druid.read.test-while-idle=true
-spring.datasource.druid.read.test-on-borrow=true
-spring.datasource.druid.read.test-on-return=false
-spring.datasource.druid.read.keep-alive=true
-
-
+#spring.redis.host=47.110.127.118
+#spring.redis.port=6379
+#spring.redis.password=123456
+#spring.redis.database=0
+#spring.redis.lettuce.pool.max-active=50
+#spring.redis.lettuce.pool.max-idle=20
+#spring.redis.lettuce.pool.min-idle=10
+#spring.redis.lettuce.pool.max-wait=5000
+#spring.redis.lettuce.pool.time-between-eviction-runs=600000
+#
+#spring.datasource.druid.write.name=write
+#spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+#spring.datasource.druid.write.username=root
+#spring.datasource.druid.write.password=12345678
+#spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.druid.write.initial-size=1
+#spring.datasource.druid.write.min-idle=1
+#spring.datasource.druid.write.max-active=5
+#spring.datasource.druid.write.validation-query=SELECT 1
+#spring.datasource.druid.write.validation-query-timeout=1
+#spring.datasource.druid.write.test-while-idle=true
+#spring.datasource.druid.write.test-on-borrow=true
+#spring.datasource.druid.write.test-on-return=false
+#spring.datasource.druid.write.keep-alive=true
+#spring.datasource.druid.read.name=read
+#spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+#spring.datasource.druid.read.username=root
+#spring.datasource.druid.read.password=12345678
+#spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.druid.read.initial-size=1
+#spring.datasource.druid.read.min-idle=1
+#spring.datasource.druid.read.max-active=5
+#spring.datasource.druid.read.validation-query=SELECT 1
+#spring.datasource.druid.read.validation-query-timeout=1
+#spring.datasource.druid.read.test-while-idle=true
+#spring.datasource.druid.read.test-on-borrow=true
+#spring.datasource.druid.read.test-on-return=false
+#spring.datasource.druid.read.keep-alive=true
+#
+#
diff --git a/ServiceSite/src/main/resources/application.properties b/ServiceSite/src/main/resources/application.properties
index 42e86f8d..5799a02e 100644
--- a/ServiceSite/src/main/resources/application.properties
+++ b/ServiceSite/src/main/resources/application.properties
@@ -1,34 +1,34 @@
-spring.application.name=dddtemplate-provider
+#spring.application.name=dddtemplate-provider
 spring.profiles.active=@env@
-server.port=8009
-swagger.enable=true
-
-mybatis-plus.global-config.db-config.db-type=mysql
-mybatis-plus.global-config.db-config.id-type=assign_id
-mybatis-plus.global-config.db-config.logic-delete-field=available
-mybatis-plus.global-config.db-config.logic-delete-value='NO'
-mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
-mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
-mybatis-plus.configuration.call-setters-on-nulls=true
-mybatis-plus.configuration.cache-enabled=false
-mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
-
-seasky.sessionTimeout=1800
-seasky.redislockExpire=300
-seasky.projectVersion=1.0.0
-seasky.cacheName=redis
-
-
-# 配置 DruidStatViewServlet
-spring.datasource.druid.stat-view-servlet.enabled=true
-spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
-# IP白名单(没有配置默认为127.0.0.1)
-spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
-# IP黑名单 (存在共同时,deny优先于allow)
-# spring.datasource.druid.deny=192.168.1.73
-# 禁用HTML页面上的“Reset All”功能
-spring.datasource.druid.stat-view-servlet.reset-enable=false
-# druid 监控平台登录名
-spring.datasource.druid.stat-view-servlet.login-username=druid
-# druid 监控平台登录密码
-spring.datasource.druid.stat-view-servlet.login-password=druid
+#server.port=8009
+#swagger.enable=true
+#
+#mybatis-plus.global-config.db-config.db-type=mysql
+#mybatis-plus.global-config.db-config.id-type=assign_id
+#mybatis-plus.global-config.db-config.logic-delete-field=available
+#mybatis-plus.global-config.db-config.logic-delete-value='NO'
+#mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
+#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
+#mybatis-plus.configuration.call-setters-on-nulls=true
+#mybatis-plus.configuration.cache-enabled=false
+#mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
+#
+#seasky.sessionTimeout=1800
+#seasky.redislockExpire=300
+#seasky.projectVersion=1.0.0
+#seasky.cacheName=redis
+#
+#
+## 配置 DruidStatViewServlet
+#spring.datasource.druid.stat-view-servlet.enabled=true
+#spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
+## IP白名单(没有配置默认为127.0.0.1)
+#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
+## IP黑名单 (存在共同时,deny优先于allow)
+## spring.datasource.druid.deny=192.168.1.73
+## 禁用HTML页面上的“Reset All”功能
+#spring.datasource.druid.stat-view-servlet.reset-enable=false
+## druid 监控平台登录名
+#spring.datasource.druid.stat-view-servlet.login-username=druid
+## druid 监控平台登录密码
+#spring.datasource.druid.stat-view-servlet.login-password=druid
diff --git a/ServiceSite/src/main/resources/bootstrap.yml b/ServiceSite/src/main/resources/bootstrap.yml
index 7fd252b9..3db553a6 100644
--- a/ServiceSite/src/main/resources/bootstrap.yml
+++ b/ServiceSite/src/main/resources/bootstrap.yml
@@ -1,20 +1,20 @@
 seasky:
   version: @version@
 server:
-  port: 8009
+  port: 8019
 spring:
   main:
     allow-bean-definition-overriding: true
   application:
-    name: dddtemplate-provider
+    name: ocr-manage
   profiles:
     active: dev
   cloud:
     nacos:
       discovery:
-        server-addr: 192.168.1.80:8848
+        server-addr: 192.168.2.10:8848
       config:
-        server-addr: 192.168.1.80:8848
+        server-addr: 192.168.2.10:8848
         file-extension: properties
     inetutils:
       preferred-networks:
-- 
GitLab


From d35bb1ce675501df844c6e3941068fa39e329937 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Sat, 18 Sep 2021 17:29:56 +0800
Subject: [PATCH 3/8] =?UTF-8?q?fix=EF=BC=9A=E6=96=B0=E5=A2=9Eocr=E5=8F=8A?=
 =?UTF-8?q?=E5=85=B6=E5=AD=90=E8=A1=A8po=EF=BC=8C=E4=BB=A5=E5=8F=8A?=
 =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=A0=B9=E6=8D=AEaccount=E6=9F=A5=E8=AF=A2oc?=
 =?UTF-8?q?r?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../seasky/seaskyocr/api/IOcrController.java  |  8 +++
 .../contract/ContractCmdServiceImpl.java      | 13 ++--
 .../command/ocr/OcrCmdService.java            |  8 +++
 ...erviceImpl.java => OcrCmdServiceImpl.java} |  7 +-
 .../command/ocr/TestCmdService.java           |  5 --
 .../contract/ContractRepository.java          | 12 ++--
 .../ProductImpl/HeHeProductImpl.java          | 25 -------
 .../domain/service/ocr/OcrDomainService.java  |  8 +++
 .../service/ocr/OcrDomainServiceImpl.java     | 11 +++
 .../IOcrFactory.java                          |  6 +-
 .../OcrFactory.java                           |  6 +-
 .../Product/IAliProduct.java                  |  2 +-
 .../Product/IHeHeProduct.java                 | 11 ++-
 .../ProductImpl/AliProductImpl.java           |  4 +-
 .../ProductImpl/HeHeProductImpl.java          | 43 ++++++++++++
 .../infrastructure/dataobject/co/OcrDo.java   | 39 +++++++++++
 .../dataobject/po/ocr/OcrBodyPO.java          | 30 +++++++++
 .../dataobject/po/ocr/OcrHeaderPO.java        | 30 +++++++++
 .../dataobject/po/ocr/OcrPO.java              | 36 ++++++++++
 .../dataobject/po/ocr/OcrParameterPO.java     | 30 +++++++++
 .../db/mapper/table/ContractMapper.java       | 22 ++++++
 .../db/mapper/table/OcrMapper.java            | 29 ++++++++
 .../db/mapper/xml/ContractMapper.xml          | 14 ++++
 .../db/mapper/xml/OcrMapper.xml               | 41 ++++++++++++
 .../repository/contract/ContractConvert.java  | 16 +++++
 .../contract/ContractRepositoryImpl.java      | 67 +++++++++++++++++++
 .../interfaces/controller/OcrController.java  | 21 ++++++
 27 files changed, 492 insertions(+), 52 deletions(-)
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/{TestCmdServiceImpl.java => OcrCmdServiceImpl.java} (50%)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/IOcrFactory.java (68%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/OcrFactory.java (73%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/Product/IAliProduct.java (89%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/Product/IHeHeProduct.java (64%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/ProductImpl/AliProductImpl.java (79%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java

diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
new file mode 100644
index 00000000..0c726c50
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.api;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:46
+ */
+public interface IOcrController {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
index 5c802740..ccf028ca 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -1,7 +1,8 @@
 package com.seasky.seaskyocr.application.command.contract;
 
-import com.seasky.seaskyocr.domain.service.OcrFactory.IOcrFactory;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -9,7 +10,6 @@ import org.springframework.web.multipart.MultipartFile;
 import sun.misc.BASE64Encoder;
 
 import java.io.IOException;
-import java.io.InputStream;
 
 /**
  * @author xiaqihang
@@ -34,7 +34,12 @@ public class ContractCmdServiceImpl implements ContractCmdService {
             byte[] bytes = file.getBytes();
             String encode = new BASE64Encoder().encode(bytes);
             String hashId = String.valueOf(encode.hashCode());
-
+            //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
+            ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
+            if (contractAggregate != null){
+                //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥�
+                return null;
+            }
         } catch (IOException e) {
             e.printStackTrace();
         }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
new file mode 100644
index 00000000..20c3d3e3
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.application.command.ocr;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:48
+ */
+public interface OcrCmdService {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
similarity index 50%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
index 4a54650d..8199f11b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
@@ -2,7 +2,10 @@ package com.seasky.seaskyocr.application.command.ocr;
 
 import org.springframework.stereotype.Service;
 
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:48
+ */
 @Service
-public class TestCmdServiceImpl implements TestCmdService {
-
+public class OcrCmdServiceImpl implements OcrCmdService{
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
deleted file mode 100644
index 2d11dba0..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.seasky.seaskyocr.application.command.ocr;
-
-public interface TestCmdService {
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
index 40c95e8b..22ad8ee7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
@@ -1,5 +1,6 @@
 package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 
+import com.seasky.core.ddd.base.DddRepository;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 
 /**
@@ -8,16 +9,15 @@ import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
  * @author bandi
  * @date 2021/09/14
  */
-public interface ContractRepository {
-
+public interface ContractRepository extends DddRepository<ContractAggregate> {
 
     /**
-     * 淇濆瓨
+     * 鏌ヨ閫氳繃鏁e垪id
      *
-     * @param contractAggregate 鍚堝悎ocr鑱氬悎鏍�
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
      */
-    void save(ContractAggregate contractAggregate);
-
+    ContractAggregate queryByHashId(String hashId);
 
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
deleted file mode 100644
index 86a27e44..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
-import org.springframework.stereotype.Service;
-
-/**
- * 鍚堝悎浜у搧impl
- *
- * @author bandi
- * @date 2021/09/17
- */
-@Service
-class HeHeProductImpl implements IHeHeProduct {
-    @Override
-    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-
-    @Override
-    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-    
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
new file mode 100644
index 00000000..c624918a
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.domain.service.ocr;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:56
+ */
+public interface OcrDomainService {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
new file mode 100644
index 00000000..49238c67
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
@@ -0,0 +1,11 @@
+package com.seasky.seaskyocr.domain.service.ocr;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:57
+ */
+@Service
+public class OcrDomainServiceImpl implements OcrDomainService{
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
similarity index 68%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
index af406b7b..e26e9f71 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
@@ -1,7 +1,7 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory;
+package com.seasky.seaskyocr.domain.service.ocrFactory;
 
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 
 /**
  * iocr宸ュ巶
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
similarity index 73%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
index f598417e..42324c2a 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
@@ -1,7 +1,7 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory;
+package com.seasky.seaskyocr.domain.service.ocrFactory;
 
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
similarity index 89%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
index 368623f0..f3d5ea81 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
@@ -1,4 +1,4 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
+package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
 
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
similarity index 64%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
index 3d3f0a54..1a2f976b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
@@ -1,6 +1,7 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
+package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
 
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 
 /**
  * iocr宸ュ巶
@@ -27,4 +28,12 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggreg
      * @return {@link String}
      */
     String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
+     */
+    ContractAggregate queryByHashId(String hashId);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
similarity index 79%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
index eeed46e4..d2d94048 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
@@ -1,7 +1,7 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
+package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
 
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
 import org.springframework.stereotype.Service;
 
 
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
new file mode 100644
index 00000000..0786a9ca
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
@@ -0,0 +1,43 @@
+package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍚堝悎浜у搧impl
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+@Service
+class HeHeProductImpl implements IHeHeProduct {
+
+    @Autowired
+    ContractRepository contractRepository;
+
+    @Override
+    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    @Override
+    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
+     */
+    @Override
+    public ContractAggregate queryByHashId(String hashId){
+        return contractRepository.queryByHashId(hashId);
+    }
+    
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
new file mode 100644
index 00000000..7506b41b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
@@ -0,0 +1,39 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.co;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 17:00
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OcrDo {
+
+    private Long id;
+
+    private String name;
+
+    private String appKey;
+
+    private String secret;
+
+    private String url;
+
+    private List<OcrBodyPO> bodyPOList;
+
+    private List<OcrHeaderPO> headerPOList;
+
+    private List<OcrParameterPO> parameterPOList;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
new file mode 100644
index 00000000..7d3d6713
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:41
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_body",autoResultMap = true)
+public class OcrBodyPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("body_key")
+    private String bodyKey;
+
+    @TableField("body_value")
+    private String bodyValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
new file mode 100644
index 00000000..c855e564
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:42
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_header",autoResultMap = true)
+public class OcrHeaderPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("header_key")
+    private String headerKey;
+
+    @TableField("header_value")
+    private String headerValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
new file mode 100644
index 00000000..e1f000a6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
@@ -0,0 +1,36 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:38
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr",autoResultMap = true)
+public class OcrPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("app_key")
+    private String appKey;
+
+    @TableField("secret")
+    private String secret;
+
+    @TableField("url")
+    private String url;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
new file mode 100644
index 00000000..c9f95174
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:43
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_parameter",autoResultMap = true)
+public class OcrParameterPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("parameter_key")
+    private String parameterKey;
+
+    @TableField("parameter_value")
+    private String parameterValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
new file mode 100644
index 00000000..a7604532
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
@@ -0,0 +1,22 @@
+package com.seasky.seaskyocr.infrastructure.db.mapper.table;
+
+import com.seasky.core.base.BaseMapper;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:08
+ */
+@Mapper
+public interface ContractMapper  extends BaseMapper<ContractPO> {
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractPO}
+     */
+    ContractPO queryByHashId(@Param("hashId") String hashId);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
new file mode 100644
index 00000000..f447152f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.infrastructure.db.mapper.table;
+
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 17:03
+ */
+@Mapper
+public interface OcrMapper {
+
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    Long queryOcrIdByAccountId(@Param("id") Long id);
+
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    OcrDo queryOcrDoById(@Param("id") Long id);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
new file mode 100644
index 00000000..41e40dd6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper">
+
+    <select id="queryByHashId" resultType="com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO">
+        select * from tb_contract
+        <where>
+            available = 'YES'
+            <if test="hashId != null and hashId != ''">
+                and hash_id = #{hashId}
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
new file mode 100644
index 00000000..c812f319
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper">
+    
+    <resultMap id="OcrBodyHeaderParameter" type="com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="app_key" property="appKey"/>
+        <result column="secret" property="secret"/>
+        <result column="url" property="url"/>
+        <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
+            <id column="bodyId" property="id"/>
+            <result column="body_key" property="bodyKey"/>
+            <result column="body_value" property="bodyValue"/>
+        </collection>
+        <collection property="headerPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO">
+            <id column="headerId" property="id"/>
+            <result column="header_key" property="headerKey"/>
+            <result column="header_value" property="headerValue"/>
+        </collection>
+        <collection property="parameterPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO">
+            <id column="parameterId" property="id"/>
+            <result column="parameter_key" property="parameterKey"/>
+            <result column="parameter_value" property="parameterValue"/>
+        </collection>
+    </resultMap>
+
+    <select id="queryOcrIdByAccountId" resultType="java.lang.Long">
+        select ocr_id from tb_account_ocr
+        <where>
+            available = 'YES'
+            <if test="id != null">
+                and account_id = #{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
+
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
new file mode 100644
index 00000000..44463ee7
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
@@ -0,0 +1,16 @@
+package com.seasky.seaskyocr.infrastructure.repository.contract;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:14
+ */
+public class ContractConvert {
+
+    public static ContractAggregate contractPoToAgg(ContractPO contractPO){
+        return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
new file mode 100644
index 00000000..dae2fc57
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
@@ -0,0 +1,67 @@
+package com.seasky.seaskyocr.infrastructure.repository.contract;
+
+import com.seasky.core.ddd.base.BaseRepository;
+import com.seasky.core.ddd.base.DomainKeysMap;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:05
+ */
+@Repository
+public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> implements ContractRepository {
+
+    @Autowired
+    ContractMapper contractMapper;
+
+    @Override
+    protected Long baseSave(ContractAggregate aggregate) {
+        return null;
+    }
+
+    @Override
+    protected void duplicateSaveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void integritySaveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void baseRemove(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void integrityRemoveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    public ContractAggregate queryByHashId(String hashId) {
+        ContractPO contractPO = contractMapper.queryByHashId(hashId);
+        return ContractConvert.contractPoToAgg(contractPO);
+    }
+
+    @Override
+    public ContractAggregate findByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    @Override
+    public Boolean isExistsByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    @Override
+    public ContractAggregate findByPersistentId(Long aLong) {
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
new file mode 100644
index 00000000..2510c193
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
@@ -0,0 +1,21 @@
+package com.seasky.seaskyocr.interfaces.controller;
+
+import com.seasky.seaskyocr.api.IOcrController;
+import com.seasky.seaskyocr.application.command.ocr.OcrCmdService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:46
+ */
+@Api(tags = "ocr绠$悊")
+@RestController
+@RequestMapping("ocrCtrl")
+public class OcrController extends BaseController implements IOcrController {
+
+    @Autowired
+    private OcrCmdService ocrCmdService;
+}
-- 
GitLab


From df1961d1ae291e3ee93ede7ceaf1e634553f0632 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Wed, 22 Sep 2021 17:30:03 +0800
Subject: [PATCH 4/8] =?UTF-8?q?fix=EF=BC=9A=E7=BC=96=E5=86=99ocr=E8=AF=86?=
 =?UTF-8?q?=E5=88=AB=E6=8E=A5=E5=8F=A3=EF=BC=8Cdomain=E5=B1=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../seaskyocr/api/IContractController.java    |   4 +-
 .../command/contract/ContractCmdService.java  |   4 +-
 .../contract/ContractCmdServiceImpl.java      |  23 ++--
 .../aggregate/ocr/BaseOcrAggregate.java       |   8 +-
 .../aggregate/ocr/BaseOcrRepository.java      |  16 +++
 .../contract/ContractAggregate.java           |  37 ++++--
 .../contract/ContractRepository.java          |   1 -
 .../ocrimplement/contract/ContractVO.java     |   9 ++
 .../ocrFactory/Product/IHeHeProduct.java      |  14 +--
 .../ProductImpl/HeHeProductImpl.java          | 108 +++++++++++++++++-
 .../infrastructure/dataobject/co/OcrDo.java   |   4 +
 .../db/mapper/xml/OcrMapper.xml               |  30 ++++-
 .../repository/contract/ContractConvert.java  |  16 +++
 .../contract/ContractRepositoryImpl.java      |  17 ++-
 .../repository/ocr/OcrConvert.java            |  29 +++++
 .../repository/ocr/OcrRepositoryImpl.java     |  33 ++++++
 .../controller/ContractController.java        |   9 +-
 17 files changed, 323 insertions(+), 39 deletions(-)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java

diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
index 92b8adeb..aea52749 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
@@ -20,8 +20,8 @@ public interface IContractController {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link Result<Long>}
+     * @return {@link Result<String>}
      */
     @PostMapping(path = "HeHeContract")
-    Result<Long> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
+    Result<String> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
index 657d0b67..fab84bd3 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
@@ -14,7 +14,7 @@ public interface ContractCmdService {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link Long}
+     * @return {@link String}
      */
-    Long createContract(MultipartFile file, CreateContractCmd createContractCmd);
+    String createContract(MultipartFile file, CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
index ccf028ca..1f710d9a 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -4,6 +4,7 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
 import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import com.seasky.seaskyocr.enums.SupplierEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,20 +26,26 @@ public class ContractCmdServiceImpl implements ContractCmdService {
      * 鍒涘缓鍚堝悓
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @return {@link Long}
+     * @param file              鏂囦欢
+     * @return {@link String}
      */
     @Override
-    public Long createContract(MultipartFile file, CreateContractCmd createContractCmd) {
-        IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+    public String createContract(MultipartFile file, CreateContractCmd createContractCmd) {
         try {
             byte[] bytes = file.getBytes();
             String encode = new BASE64Encoder().encode(bytes);
             String hashId = String.valueOf(encode.hashCode());
-            //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
-            ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
-            if (contractAggregate != null){
-                //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥�
-                return null;
+            if (createContractCmd.getSupplierEnum().equals(SupplierEnum.鍚堝悎.val())){
+                IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+                //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
+                ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
+                if (contractAggregate != null){
+                    //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥� contractAggregate杞琌ut
+                    return null;
+                }
+                ContractAggregate aggregate = ContractAggregate.builder().build();
+                aggregate.create(createContractCmd.getAccountId(),file,createContractCmd.getAddField());
+                heHeProduct.getContract(aggregate);
             }
         } catch (IOException e) {
             e.printStackTrace();
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
index 639be2aa..36c7144b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
@@ -2,8 +2,10 @@ package com.seasky.seaskyocr.domain.aggregate.ocr;
 
 import com.seasky.seaskyocr.enums.MethodEnum;
 import com.seasky.seaskyocr.enums.SupplierEnum;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
@@ -15,19 +17,21 @@ import java.util.Map;
  */
 @Data
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class BaseOcrAggregate {
     private Long id;
     private String name;
     private String appKey;
     private String secret;
     private String url;
-    private String contentType;
+//    private String contentType;
     private SupplierEnum supplierEnum;
     private MethodEnum methodEnum;
 
     private Map<String,String> body;
     private Map<String,String> head;
-    private Map<String,String> parameter;
+    private Map<String,Object> parameter;
 
     public void  updateAgg(BaseOcrVO vo){
         //todo 鎵€鏈夊睘鎬ц祴鍊�
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
index 1dd0dd6c..8b2e927b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
@@ -1,5 +1,7 @@
 package com.seasky.seaskyocr.domain.aggregate.ocr;
 
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
 /**
  * 鍩虹ocr搴�
  *
@@ -16,6 +18,20 @@ public interface BaseOcrRepository {
      */
     void save(BaseOcrAggregate baseOcrAggregate);
 
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    BaseOcrAggregate queryOcrDoById(Long id);
 
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    Long queryOcrIdByAccountId(Long id);
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
index ce70ec35..595c8f0b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
@@ -3,6 +3,9 @@ package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import lombok.Builder;
 import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 /**
  * 鍚堝悓鎬�
@@ -25,39 +28,51 @@ public class ContractAggregate extends BaseOcrImplementAggregate {
     private Long accountId;
 
     /**
-     * 鍚堝悓浠g爜
+     * 鍚堝悓鍚嶇О
      */
-    private String contractCode;
+    private String contractName;
 
     /**
-     * 鍚堝悓鍚嶇О
+     * 鍚堝悓缂栧彿
      */
-    private String contractName;
+    private String contractCode;
 
     /**
      * 鍐呭
      */
     private String content;
 
+    /**
+     * 鏂囦欢
+     */
+    private MultipartFile file;
+
+    /**
+     * 瑕佹煡璇㈢殑瀛楁
+     */
+    private List<String> addField;
+
     /**
      * 鍒涘缓鍚堝悓
      *
      * @param accountId 甯愭埛id
      */
-    public void create(Long accountId){
+    public void create(Long accountId, MultipartFile file, List<String> addField){
         this.accountId = accountId;
+        this.file = file;
+        this.addField = addField;
     }
 
     /**
      * 淇敼鍚堝悓
      *
-     * @param contractCode 鍚堝悓浠g爜
-     * @param contractName 鍚堝悓鍚嶇О
+     * @param contractVO 鍚堝悓绛捐瘉瀹�
      */
-    public void modify(String contractCode, String contractName, String hashId){
-        this.contractCode = contractCode;
-        this.contractName = contractName;
-        this.hashId = hashId;
+    public void modify(ContractVO contractVO){
+        this.contractName = contractVO.getContractName();
+        this.contractCode = contractVO.getContractCode();
+        this.hashId = contractVO.getHashId();
+        this.content = contractVO.getContent();
     }
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
index 22ad8ee7..6aaa8022 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
@@ -19,5 +19,4 @@ public interface ContractRepository extends DddRepository<ContractAggregate> {
      */
     ContractAggregate queryByHashId(String hashId);
 
-
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
index 1249f482..e2f0d7a7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
@@ -1,11 +1,20 @@
 package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
 /**
  * 鍚堝悓绛捐瘉瀹�
  *
  * @author bandi
  * @date 2021/09/17
  */
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class ContractVO {
 
     /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
index 1a2f976b..00c0212f 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
@@ -21,13 +21,13 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
     String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
 
 
-    /**
-     * 鍏夊瀛楃璇嗗埆
-     *
-     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
-     * @return {@link String}
-     */
-    String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
+   /**
+    * 寰楀埌鍚堝悓
+    *
+    * @param contractAggregate 鍚堝悓鎬�
+    * @return {@link String}
+    */
+   String getContract(ContractAggregate contractAggregate);
 
     /**
      * 鏌ヨ閫氳繃鏁e垪id
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
index 0786a9ca..df4fe760 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
@@ -1,11 +1,38 @@
 package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataAccessException;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.omg.IOP.Encoding;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import java.util.Map;
+import org.springframework.util.ObjectUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 鍚堝悎浜у搧impl
@@ -18,6 +45,8 @@ class HeHeProductImpl implements IHeHeProduct {
 
     @Autowired
     ContractRepository contractRepository;
+    @Autowired
+    BaseOcrRepository ocrRepository;
 
     @Override
     public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
@@ -25,8 +54,49 @@ class HeHeProductImpl implements IHeHeProduct {
     }
 
     @Override
-    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
+    public String getContract(ContractAggregate contractAggregate) {
+        byte[] bytes = new byte[0];
+        try {
+            bytes = contractAggregate.getFile().getBytes();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        String encode = Base64.encodeBase64String(bytes);
+//        Long ocrId = ocrRepository.queryOcrIdByAccountId(contractAggregate.getAccountId());
+//        if (ocrId == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "涓嶅瓨鍦ㄤ笌璇ョ敤鎴风浉鍏宠仈鐨凮cr", ""));
+//        }
+//        BaseOcrAggregate baseOcrAggregate = ocrRepository.queryOcrDoById(ocrId);
+//        if (baseOcrAggregate == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鏌ヨ涓嶅埌鐩稿叧Ocr淇℃伅", ""));
+//        }
+//        Map<String, String> head = baseOcrAggregate.getHead();
+//        head.put("app-key","18de35986509e69f1a93f5907ecdac4f");
+//        head.put("app-secret","36b0d46acf9dd9e18665a40438d6ce77");
+//        Map<String, Object> parameter = new HashMap<>();
+//        //TODO 淇敼鍙傛暟key
+////        String configuredKeys = parameter.get("4").toString();
+////        contractAggregate.getAddField().add(configuredKeys);
+//        parameter.put("configuredKeys",contractAggregate.getAddField());
+//        parameter.put("filedata",encode);
+//        parameter.put("filename",contractAggregate.getFile().getOriginalFilename());
+//        String jsonString = JSON.toJSONString(parameter);
+//        String httpPost = sendPost(baseOcrAggregate.getUrl(), jsonString, head);
+//        if (ObjectUtils.isEmpty(httpPost)){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "OCR鍥剧墖璇嗗埆澶辫触", ""));
+//        }
+//        String jsonUrl = JSONObject.parseObject(httpPost).getJSONObject("result").get("json_url").toString();
+        String jsonUrl = "https://doc-compare.intsig.com/doc_extraction/keyinfo/result?format=json&task_id=269e75f120b7ac27142456673978971a";
+        String result = sendPost(jsonUrl, null, null);
+        String content = JSONObject.parseObject(result).getJSONObject("result").get("customize_keys").toString();
+        System.out.println(JSONObject.parseObject(result).getJSONObject("result").get("stdandard_keys").toString());
+        String contractCode = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓缂栧彿").toString();
+        String contractName = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓鍚嶇О").toString();
+        String  hashId = String.valueOf(encode.hashCode());
+        ContractVO contractVO = ContractVO.builder().accountId(contractAggregate.getAccountId()).content(content).contractCode(contractCode).contractName(contractName).hashId(hashId).build();
+        contractAggregate.modify(contractVO);
+        contractRepository.save(contractAggregate);
+        return content;
     }
 
     /**
@@ -39,5 +109,37 @@ class HeHeProductImpl implements IHeHeProduct {
     public ContractAggregate queryByHashId(String hashId){
         return contractRepository.queryByHashId(hashId);
     }
-    
+
+    /**
+     * get http post
+     *
+     * @param url      url
+     * @param jsonData json鏁版嵁
+     * @return {@link String}
+     */
+    private String sendPost(String url, String jsonData, Map<String,String> header) {
+        String result ="";
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+        if (header != null){
+            header.forEach((key,value) -> httpPost.setHeader(key, value));
+        }
+        if (jsonData != null){
+            StringEntity entity = new StringEntity(jsonData, "UTF-8");
+            httpPost.setEntity(entity);
+        }
+        CloseableHttpResponse response = null;
+        try {
+            response = httpclient.execute(httpPost);
+            StatusLine status = response.getStatusLine();
+            if (status.getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity responseEntity = response.getEntity();
+                result = EntityUtils.toString(responseEntity);
+            }
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
index 7506b41b..b3c531b1 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
@@ -31,6 +31,10 @@ public class OcrDo {
 
     private String url;
 
+    private String supplierEnum;
+
+    private String methodEnum;
+
     private List<OcrBodyPO> bodyPOList;
 
     private List<OcrHeaderPO> headerPOList;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
index c812f319..306cb2ba 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
@@ -8,6 +8,8 @@
         <result column="app_key" property="appKey"/>
         <result column="secret" property="secret"/>
         <result column="url" property="url"/>
+        <result column="supplierEnum" property="supplierEnum"/>
+        <result column="methodEnum" property="methodEnum"/>
         <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
             <id column="bodyId" property="id"/>
             <result column="body_key" property="bodyKey"/>
@@ -36,6 +38,32 @@
     </select>
 
     <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
-
+        SELECT
+        o.id,
+        o.NAME,
+        o.app_key,
+        o.secret,
+        o.url,
+        o.supplierEnum,
+        o.methodEnum,
+        b.id AS bodyId,
+        b.body_key,
+        b.body_value,
+        h.id AS headId,
+        h.header_key,
+        h.header_value ,
+        p.id as parameterId,
+        p.parameter_key,
+        p.parameter_value
+        FROM
+        tb_ocr AS o
+        LEFT JOIN tb_ocr_body AS b ON o.id = b.ocr_id
+        LEFT JOIN tb_ocr_header AS h ON o.id = h.ocr_id
+        LEFT JOIN tb_ocr_parameter AS p ON o.id = p.ocr_id
+        <where>
+            <if test="id != null">
+                o.id = #{id}
+            </if>
+        </where>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
index 44463ee7..3a218d5d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
@@ -10,7 +10,23 @@ import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
  */
 public class ContractConvert {
 
+    /**
+     * 鍚堝悓璁㈠崟gg
+     *
+     * @param contractPO 鍚堝悓璁㈠崟
+     * @return {@link ContractAggregate}
+     */
     public static ContractAggregate contractPoToAgg(ContractPO contractPO){
         return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
     }
+
+    /**
+     * 鍚堝悓gg闃垮疂
+     *
+     * @param contractAggregate 鍚堝悓鎬�
+     * @return {@link ContractPO}
+     */
+    public static ContractPO contractAggToPo(ContractAggregate contractAggregate){
+        return MapperUtils.INSTANCE.map(ContractPO.class,contractAggregate);
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
index dae2fc57..893ca016 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
@@ -1,7 +1,10 @@
 package com.seasky.seaskyocr.infrastructure.repository.contract;
 
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
 import com.seasky.core.ddd.base.BaseRepository;
 import com.seasky.core.ddd.base.DomainKeysMap;
+import com.seasky.core.exception.DataAccessException;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
 import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
@@ -21,7 +24,19 @@ public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> im
 
     @Override
     protected Long baseSave(ContractAggregate aggregate) {
-        return null;
+        ContractPO contractPO = ContractConvert.contractAggToPo(aggregate);
+        if (contractPO.getId() == null){
+            contractPO.prepareBeforeInsert();
+            if (contractMapper.insert(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅鏂板澶辫触", ""));
+            }
+        }else{
+            contractPO.prepareBeforeUpdate();
+            if (contractMapper.updateById(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅淇敼澶辫触", ""));
+            }
+        }
+        return 1L;
     }
 
     @Override
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
new file mode 100644
index 00000000..559c294c
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.infrastructure.repository.ocr;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/22 9:04
+ */
+public class OcrConvert {
+
+    public static BaseOcrAggregate buildBaseOcrAgg(OcrDo ocrDo){
+        BaseOcrAggregate baseOcrAggregate = MapperUtils.INSTANCE.map(BaseOcrAggregate.class, ocrDo);
+        Map<String,String> body = new HashMap<>(6);
+        Map<String,String> head = new HashMap<>(6);
+        Map<String,Object> parameter = new HashMap<>(6);
+        ocrDo.getBodyPOList().forEach(i -> body.put(i.getBodyKey(),i.getBodyValue()));
+        ocrDo.getHeaderPOList().forEach(i -> head.put(i.getHeaderKey(),i.getHeaderValue()));
+        ocrDo.getParameterPOList().forEach(i -> parameter.put(i.getParameterKey(),i.getParameterValue()));
+        baseOcrAggregate.setBody(body);
+        baseOcrAggregate.setHead(head);
+        baseOcrAggregate.setParameter(parameter);
+        return baseOcrAggregate;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index c5aac1f9..41168a8d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -2,6 +2,10 @@ package com.seasky.seaskyocr.infrastructure.repository.ocr;
 
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 /**
  * ocr搴搃mpl
@@ -9,10 +13,39 @@ import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
  * @author bandi
  * @date 2021/09/17
  */
+@Repository
 public class OcrRepositoryImpl implements BaseOcrRepository {
+
+    @Autowired
+    OcrMapper ocrMapper;
+
     @Override
     public void save(BaseOcrAggregate baseOcrAggregate) {
 
     }
 
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    @Override
+    public BaseOcrAggregate queryOcrDoById(Long id) {
+        OcrDo ocrDo = ocrMapper.queryOcrDoById(id);
+        return OcrConvert.buildBaseOcrAgg(ocrDo);
+    }
+
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    @Override
+    public Long queryOcrIdByAccountId(Long id) {
+        return ocrMapper.queryOcrIdByAccountId(id);
+    }
+
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
index 0cc821ae..cdd04d62 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
@@ -27,9 +27,16 @@ public class ContractController extends BaseController implements IContractContr
     @Autowired
     ContractCmdService contractCmdService;
 
+    /**
+     * 浠栫殑鍚堝悓
+     *
+     * @param file              鏂囦欢
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @return {@link Result<String>}
+     */
     @ApiOperation("鍒涘缓鍚堝悓")
     @Override
-    public Result<Long> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
+    public Result<String> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
         return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
     }
 }
-- 
GitLab


From 413ef4ed7cabdc6714dbb0a70577639a0e97d5f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A4=8F=E5=90=AF=E8=88=AA?= <xiaqihang@seaskysh.com>
Date: Thu, 23 Sep 2021 01:34:54 +0000
Subject: [PATCH 5/8] Revert "Merge branch 'xiaqihang' into 'master'"

This reverts merge request !8
---
 ServiceSite/facade/pom.xml                    |   6 +-
 .../seaskyocr/api/IContractController.java    |  27 ----
 .../seasky/seaskyocr/api/IOcrController.java  |   8 -
 .../seasky/seaskyocr/api/ITestController.java |  41 +++++
 .../dto/contract/ContractRequestCmd.java      |  24 ---
 .../dto/contract/CreateContractCmd.java       |  29 ----
 .../seasky/seaskyocr/enums/MethodEnum.java    |  26 +---
 .../seasky/seaskyocr/enums/SupplierEnum.java  |  24 ---
 ServiceSite/pom.xml                           |   5 -
 .../src/main/java/com/seasky/Application.java |   6 +-
 .../{assembler => account}/TestAssembler.java |   2 +-
 .../contract/HeHeContractAssembler.java       |  15 --
 .../command/contract/ContractCmdService.java  |  20 ---
 .../contract/ContractCmdServiceImpl.java      |  55 -------
 .../command/ocr/OcrCmdService.java            |   8 -
 .../command/ocr/TestCmdService.java           |   5 +
 ...rviceImpl.java => TestCmdServiceImpl.java} |   7 +-
 .../aggregate/account/AccountRepository.java  |  16 --
 .../aggregate/ocr/BaseOcrAggregate.java       |   8 +-
 .../aggregate/ocr/BaseOcrRepository.java      |  14 +-
 ...regate.java => OcrImplementAggregate.java} |   5 +-
 .../contract/ContractAggregate.java           |  78 ----------
 .../contract/ContractRepository.java          |  22 ---
 .../ocrimplement/contract/ContractVO.java     |  49 ------
 .../domain/service/BaseOcrDomainSvr.java      |  11 ++
 .../domain/service/FlowDomainServiceImpl.java |  17 ++
 .../IOcrFactory.java                          |   6 +-
 .../OcrFactory.java                           |   8 +-
 .../Product/IAliProduct.java                  |   8 +-
 .../OcrFactory/Product/IHeHeProduct.java      |  33 ++++
 .../ProductImpl/AliProductImpl.java           |  23 +++
 .../ProductImpl/HeHeProductImpl.java          |  22 +++
 .../domain/service/ocr/OcrDomainService.java  |   8 -
 .../service/ocr/OcrDomainServiceImpl.java     |  11 --
 .../ocrFactory/Product/IHeHeProduct.java      |  39 -----
 .../ProductImpl/AliProductImpl.java           |  25 ---
 .../ProductImpl/HeHeProductImpl.java          | 145 ------------------
 .../infrastructure/dataobject/co/OcrDo.java   |  43 ------
 .../infrastructure/dataobject/po/CardPO.java  |   4 +
 .../dataobject/po/contract/ContractPO.java    |  60 --------
 .../dataobject/po/ocr/OcrBodyPO.java          |  30 ----
 .../dataobject/po/ocr/OcrHeaderPO.java        |  30 ----
 .../dataobject/po/ocr/OcrPO.java              |  36 -----
 .../dataobject/po/ocr/OcrParameterPO.java     |  30 ----
 .../db/mapper/table/ContractMapper.java       |  22 ---
 .../db/mapper/table/OcrMapper.java            |  29 ----
 .../db/mapper/xml/ContractMapper.xml          |  14 --
 .../db/mapper/xml/OcrMapper.xml               |  69 ---------
 .../repository/contract/ContractConvert.java  |  32 ----
 .../contract/ContractRepositoryImpl.java      |  82 ----------
 .../repository/ocr/OcrConvert.java            |  29 ----
 .../repository/ocr/OcrRepositoryImpl.java     |  30 +---
 .../repository/test/TestConvert.java          |  35 +++++
 .../repository/test/TestRepositoryImpl.java   |  16 ++
 .../controller/ContractController.java        |  42 -----
 .../interfaces/controller/OcrController.java  |  21 ---
 .../interfaces/controller/TestController.java | 102 ++++++++++++
 .../seaskyocr/interfaces/soap/SOAPConfig.java |  65 ++++++++
 .../interfaces/soap/TestWebService.java       |  26 ++++
 .../main/resources/application-dev.properties |  80 +++++-----
 .../src/main/resources/application.properties |  66 ++++----
 ServiceSite/src/main/resources/bootstrap.yml  |   8 +-
 .../controller/test/TestControllerTest.java   |  65 ++++++++
 63 files changed, 570 insertions(+), 1352 deletions(-)
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/{assembler => account}/TestAssembler.java (63%)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/{OcrCmdServiceImpl.java => TestCmdServiceImpl.java} (50%)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/{BaseOcrImplementAggregate.java => OcrImplementAggregate.java} (73%)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{ocrFactory => OcrFactory}/IOcrFactory.java (68%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{ocrFactory => OcrFactory}/OcrFactory.java (65%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{ocrFactory => OcrFactory}/Product/IAliProduct.java (50%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
 create mode 100644 ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java

diff --git a/ServiceSite/facade/pom.xml b/ServiceSite/facade/pom.xml
index f0275bf6..f591031d 100644
--- a/ServiceSite/facade/pom.xml
+++ b/ServiceSite/facade/pom.xml
@@ -3,10 +3,10 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>com.seasky</groupId>
-	<artifactId>seasky-ocr-api</artifactId>
+	<artifactId>dddtemplate-api</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
-	<name>seasky-ocr-api</name>
-	<description>seasky-ocr-api project for dddtemplate</description>
+	<name>dddtemplate-api</name>
+	<description>dddtemplate-api project for dddtemplate</description>
 
 	<properties>
 		<java.version>1.8</java.version>
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
deleted file mode 100644
index aea52749..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.seasky.seaskyocr.api;
-
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.multipart.MultipartFile;
-
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:18
- */
-@RequestMapping("contract")
-public interface IContractController {
-
-    /**
-     * 浠栫殑鍚堝悓
-     * 鍒涘缓浠栫殑鍚堝悓
-     *
-     * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @param file              鏂囦欢
-     * @return {@link Result<String>}
-     */
-    @PostMapping(path = "HeHeContract")
-    Result<String> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
deleted file mode 100644
index 0c726c50..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.seasky.seaskyocr.api;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:46
- */
-public interface IOcrController {
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
new file mode 100644
index 00000000..c48edbf0
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
@@ -0,0 +1,41 @@
+package com.seasky.seaskyocr.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.dto.ocr.TestCmd;
+import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
+import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.io.UnsupportedEncodingException;
+
+@FeignClient("dddtemplate-provider")
+@RequestMapping("test")
+@Api("Test")
+public interface ITestController {
+
+    @ApiOperation("1.testQ")
+    @PostMapping(path = "/pc/v1/queryList")
+    Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry);
+
+    @ApiOperation("2.testExport")
+    @PostMapping(path = "/pc/v1/export")
+    ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException;
+
+    @ApiOperation("3.testSave")
+    @PostMapping(path = "/pc/v1/save")
+    Result<Long> testSave(@RequestBody TestCmd testCmd);
+
+    @ApiOperation("4.testSubmit")
+    @PostMapping(path = "/pc/v1/submit")
+    Result<Long> testSubmit(@RequestBody TestCmd testCmd);
+
+    @ApiOperation("5.testSaveAndSubmit")
+    @PostMapping(path = "/pc/v1/saveandsubmit")
+    Result<Long> testSaveAndSubmit(@RequestBody TestCmd testCmd);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
deleted file mode 100644
index 6ec90672..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.seasky.seaskyocr.dto.contract;
-
-import com.seasky.core.ddd.base.BaseDto;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:15
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class ContractRequestCmd extends BaseDto {
-
-    private String body;
-
-    private String head;
-
-    private String parameter;
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
deleted file mode 100644
index 8438eac0..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.seasky.seaskyocr.dto.contract;
-
-import com.seasky.core.ddd.base.BaseDto;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:10
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class CreateContractCmd extends BaseDto {
-
-    private Long accountId;
-
-    private String methodEnum;
-
-    private String supplierEnum;
-
-    private List<String> addField;
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
index de49ff6d..0d9172fe 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
@@ -1,28 +1,4 @@
 package com.seasky.seaskyocr.enums;
 
-/**
- * 鏂规硶鏋氫妇
- *
- * @author xiaqihang
- * @date 2021/09/18
- */
-public enum MethodEnum {
-
-    鍚堝悓("鍚堝悓","1");
-
-    final String k;
-    final String v;
-
-    MethodEnum(final String k,final String v) {
-        this.k = k;
-        this.v = v;
-    }
-
-    public String val() {
-        return v;
-    }
-
-    public String key() {
-        return k;
-    }
+public class MethodEnum {
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
index 1471d5db..1538afed 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
@@ -1,28 +1,4 @@
 package com.seasky.seaskyocr.enums;
 
-/**
- * 渚涘簲鍟嗘灇涓�
- *
- * @author xiaqihang
- * @date 2021/09/18
- */
 public enum SupplierEnum {
-
-    鍚堝悎("鍚堝悎","1");
-
-    final String k;
-    final String v;
-
-    SupplierEnum(final String k,final String v) {
-        this.k = k;
-        this.v = v;
-    }
-
-    public String val() {
-        return v;
-    }
-
-    public String key() {
-        return k;
-    }
 }
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index 3ffac870..9de4d664 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -71,11 +71,6 @@
             <artifactId>core</artifactId>
             <version>1.4.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>com.seasky</groupId>
-            <artifactId>seasky-ocr-api</artifactId>
-            <version>0.0.1-SNAPSHOT</version>
-        </dependency>
         <dependency>
             <groupId>com.seasky</groupId>
             <artifactId>dddtemplate-api</artifactId>
diff --git a/ServiceSite/src/main/java/com/seasky/Application.java b/ServiceSite/src/main/java/com/seasky/Application.java
index 89aa62c5..a3456b84 100644
--- a/ServiceSite/src/main/java/com/seasky/Application.java
+++ b/ServiceSite/src/main/java/com/seasky/Application.java
@@ -10,9 +10,13 @@ import org.springframework.scheduling.annotation.EnableAsync;
 /***
  * @author bandi
  * */
-@SpringBootApplication(exclude = {org.apache.shiro.spring.boot.autoconfigure.ShiroAnnotationProcessorAutoConfiguration.class})
+@SpringBootApplication
 @EnableAspectJAutoProxy(exposeProxy = true)
 @EnableDiscoveryClient
+@EnableFeignClients(basePackages = {
+        "com.seasky.some-api"
+        ,"com.seasky.other-api"
+})
 @EnableAsync
 public class Application {
 
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
similarity index 63%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
index 9bb1db82..d5f1bfdb 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
@@ -1,4 +1,4 @@
-package com.seasky.seaskyocr.application.command.assembler;
+package com.seasky.seaskyocr.application.command.account;
 
 
 /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
deleted file mode 100644
index bcf498a1..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.seasky.seaskyocr.application.command.assembler.contract;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
-import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 11:02
- */
-public class HeHeContractAssembler {
-
-    public static ContractVO buildHeHeVo(CreateContractCmd heHeContractCmd){
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
deleted file mode 100644
index fab84bd3..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.seasky.seaskyocr.application.command.contract;
-
-import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-import org.springframework.web.multipart.MultipartFile;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:32
- */
-public interface ContractCmdService {
-
-    /**
-     * 鍒涘缓鍚堝悓
-     *
-     * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @param file              鏂囦欢
-     * @return {@link String}
-     */
-    String createContract(MultipartFile file, CreateContractCmd createContractCmd);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
deleted file mode 100644
index 1f710d9a..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.seasky.seaskyocr.application.command.contract;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
-import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
-import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-import com.seasky.seaskyocr.enums.SupplierEnum;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import sun.misc.BASE64Encoder;
-
-import java.io.IOException;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:34
- */
-@Service
-public class ContractCmdServiceImpl implements ContractCmdService {
-
-    @Autowired
-    IOcrFactory iOcrFactory;
-
-    /**
-     * 鍒涘缓鍚堝悓
-     *
-     * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @param file              鏂囦欢
-     * @return {@link String}
-     */
-    @Override
-    public String createContract(MultipartFile file, CreateContractCmd createContractCmd) {
-        try {
-            byte[] bytes = file.getBytes();
-            String encode = new BASE64Encoder().encode(bytes);
-            String hashId = String.valueOf(encode.hashCode());
-            if (createContractCmd.getSupplierEnum().equals(SupplierEnum.鍚堝悎.val())){
-                IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
-                //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
-                ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
-                if (contractAggregate != null){
-                    //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥� contractAggregate杞琌ut
-                    return null;
-                }
-                ContractAggregate aggregate = ContractAggregate.builder().build();
-                aggregate.create(createContractCmd.getAccountId(),file,createContractCmd.getAddField());
-                heHeProduct.getContract(aggregate);
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
deleted file mode 100644
index 20c3d3e3..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.seasky.seaskyocr.application.command.ocr;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:48
- */
-public interface OcrCmdService {
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
new file mode 100644
index 00000000..2d11dba0
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
@@ -0,0 +1,5 @@
+package com.seasky.seaskyocr.application.command.ocr;
+
+public interface TestCmdService {
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
similarity index 50%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
index 8199f11b..4a54650d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
@@ -2,10 +2,7 @@ package com.seasky.seaskyocr.application.command.ocr;
 
 import org.springframework.stereotype.Service;
 
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:48
- */
 @Service
-public class OcrCmdServiceImpl implements OcrCmdService{
+public class TestCmdServiceImpl implements TestCmdService {
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
deleted file mode 100644
index db04fe62..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.seasky.seaskyocr.domain.aggregate.account;
-
-/**
- * 璐︽埛瀛樺偍搴�
- *
- * @author bandi
- * @date 2021/09/17
- */
-public interface AccountRepository {
-    /**
-     * 淇濆瓨
-     *
-     * @param accountAggregate 璐︽埛鎬�
-     */
-    void save(AccountAggregate accountAggregate);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
index 36c7144b..639be2aa 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
@@ -2,10 +2,8 @@ package com.seasky.seaskyocr.domain.aggregate.ocr;
 
 import com.seasky.seaskyocr.enums.MethodEnum;
 import com.seasky.seaskyocr.enums.SupplierEnum;
-import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
@@ -17,21 +15,19 @@ import java.util.Map;
  */
 @Data
 @Builder
-@AllArgsConstructor
-@NoArgsConstructor
 public class BaseOcrAggregate {
     private Long id;
     private String name;
     private String appKey;
     private String secret;
     private String url;
-//    private String contentType;
+    private String contentType;
     private SupplierEnum supplierEnum;
     private MethodEnum methodEnum;
 
     private Map<String,String> body;
     private Map<String,String> head;
-    private Map<String,Object> parameter;
+    private Map<String,String> parameter;
 
     public void  updateAgg(BaseOcrVO vo){
         //todo 鎵€鏈夊睘鎬ц祴鍊�
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
index 8b2e927b..b00919c7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
@@ -1,7 +1,5 @@
 package com.seasky.seaskyocr.domain.aggregate.ocr;
 
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-
 /**
  * 鍩虹ocr搴�
  *
@@ -19,19 +17,11 @@ public interface BaseOcrRepository {
     void save(BaseOcrAggregate baseOcrAggregate);
 
     /**
-     * 鏌ヨocr鐨刬d
+     * 鍒犻櫎
      *
      * @param id id
-     * @return {@link OcrDo}
      */
-    BaseOcrAggregate queryOcrDoById(Long id);
+    void remove(Long id);
 
-    /**
-     * 閫氳繃甯愭埛id鏌ヨocr id
-     *
-     * @param id id
-     * @return {@link Long}
-     */
-    Long queryOcrIdByAccountId(Long id);
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java
similarity index 73%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java
index 489f67db..1eae551e 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java
@@ -8,10 +8,7 @@ import com.seasky.core.ddd.base.BaseAggregate;
  * @author bandi
  * @date 2021/09/17
  */
-public class BaseOcrImplementAggregate extends BaseAggregate {
-
-    public String hashId;
-
+public class OcrImplementAggregate extends BaseAggregate {
     @Override
     protected String iniDescribeName() {
         return null;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
deleted file mode 100644
index 595c8f0b..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import lombok.Builder;
-import lombok.Data;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-
-/**
- * 鍚堝悓鎬�
- *
- * @author bandi
- * @date 2021/09/17
- */
-@Builder
-@Data
-public class ContractAggregate extends BaseOcrImplementAggregate {
-
-    /**
-     * 鍚堝悓id
-     */
-    private Long id;
-
-    /**
-     * 璐︽埛id
-     */
-    private Long accountId;
-
-    /**
-     * 鍚堝悓鍚嶇О
-     */
-    private String contractName;
-
-    /**
-     * 鍚堝悓缂栧彿
-     */
-    private String contractCode;
-
-    /**
-     * 鍐呭
-     */
-    private String content;
-
-    /**
-     * 鏂囦欢
-     */
-    private MultipartFile file;
-
-    /**
-     * 瑕佹煡璇㈢殑瀛楁
-     */
-    private List<String> addField;
-
-    /**
-     * 鍒涘缓鍚堝悓
-     *
-     * @param accountId 甯愭埛id
-     */
-    public void create(Long accountId, MultipartFile file, List<String> addField){
-        this.accountId = accountId;
-        this.file = file;
-        this.addField = addField;
-    }
-
-    /**
-     * 淇敼鍚堝悓
-     *
-     * @param contractVO 鍚堝悓绛捐瘉瀹�
-     */
-    public void modify(ContractVO contractVO){
-        this.contractName = contractVO.getContractName();
-        this.contractCode = contractVO.getContractCode();
-        this.hashId = contractVO.getHashId();
-        this.content = contractVO.getContent();
-    }
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
deleted file mode 100644
index 6aaa8022..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
-
-import com.seasky.core.ddd.base.DddRepository;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-
-/**
- * 鍩虹ocr搴�
- *
- * @author bandi
- * @date 2021/09/14
- */
-public interface ContractRepository extends DddRepository<ContractAggregate> {
-
-    /**
-     * 鏌ヨ閫氳繃鏁e垪id
-     *
-     * @param hashId 鏁e垪id
-     * @return {@link ContractAggregate}
-     */
-    ContractAggregate queryByHashId(String hashId);
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
deleted file mode 100644
index e2f0d7a7..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 鍚堝悓绛捐瘉瀹�
- *
- * @author bandi
- * @date 2021/09/17
- */
-@Builder
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class ContractVO {
-
-    /**
-     * 鍚堝悓id
-     */
-    private Long id;
-
-    /**
-     * 璐︽埛id
-     */
-    private Long accountId;
-
-    /**
-     * 鏁e垪id
-     */
-    private String hashId;
-
-    /**
-     * 鍚堝悓浠g爜
-     */
-    private String contractCode;
-
-    /**
-     * 鍚堝悓鍚嶇О
-     */
-    private String contractName;
-
-    /**
-     * 鍐呭
-     */
-    private String content;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
new file mode 100644
index 00000000..32ecdd85
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
@@ -0,0 +1,11 @@
+package com.seasky.seaskyocr.domain.service;
+
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+
+public interface BaseOcrDomainSvr<T extends BaseOcrAggregate> {
+
+     String ocr(T agg);
+
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
new file mode 100644
index 00000000..8c3d9136
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
@@ -0,0 +1,17 @@
+package com.seasky.seaskyocr.domain.service;
+
+import com.seasky.seaskyocr.domain.event.DeleteTestEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FlowDomainServiceImpl {
+
+    @EventListener
+    @Order(0)
+    public void deleteTestVerify(DeleteTestEvent event) {
+        // 杩涜鍒犻櫎test鐨勬牎楠�
+        System.out.println("娴佺▼鏀跺埌鍒犻櫎浜嬩欢锛屽弬鏁�:" + event.getSource());//鑾峰彇鍙傛暟
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
similarity index 68%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
index e26e9f71..af406b7b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
@@ -1,7 +1,7 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory;
+package com.seasky.seaskyocr.domain.service.OcrFactory;
 
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
 
 /**
  * iocr宸ュ巶
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
similarity index 65%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
index 42324c2a..fdd2e3c6 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
@@ -1,8 +1,7 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory;
+package com.seasky.seaskyocr.domain.service.OcrFactory;
 
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
-import org.springframework.stereotype.Component;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
 
 import javax.annotation.Resource;
 
@@ -12,7 +11,6 @@ import javax.annotation.Resource;
  * @author bandi
  * @date 2021/09/17
  */
-@Component
 public class OcrFactory implements IOcrFactory {
 
      @Resource
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
similarity index 50%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
index f3d5ea81..adbaeaaf 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
@@ -1,6 +1,6 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
+package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
 
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
 
 public interface IAliProduct {
     /**
@@ -9,7 +9,7 @@ public interface IAliProduct {
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
+    public String getToken(OcrImplementAggregate ocrImplementAggregate);
 
 
     /**
@@ -18,5 +18,5 @@ public interface IAliProduct {
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String ocr(BaseOcrImplementAggregate ocrImplementAggregate);
+    public String ocr(OcrImplementAggregate ocrImplementAggregate);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
new file mode 100644
index 00000000..504dde3b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
@@ -0,0 +1,33 @@
+package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
+
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * iocr宸ュ巶
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+
+ public interface IHeHeProduct {
+
+    /**
+     * 鑾峰緱浠ょ墝
+     *
+     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
+     * @return {@link String}
+     */
+    public String getToken(OcrImplementAggregate ocrImplementAggregate);
+
+
+    /**
+     * 鍏夊瀛楃璇嗗埆
+     *
+     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
+     * @return {@link String}
+     */
+    public String ocr(OcrImplementAggregate ocrImplementAggregate);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
new file mode 100644
index 00000000..07651089
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
@@ -0,0 +1,23 @@
+package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
+
+
+/**
+ * 闃块噷浜у搧impl
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+class AliProductImpl implements IAliProduct {
+    @Override
+    public String getToken(OcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    @Override
+    public String ocr(OcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
new file mode 100644
index 00000000..69b16fad
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
@@ -0,0 +1,22 @@
+package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
+import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+
+/**
+ * 鍚堝悎浜у搧impl
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+class HeHeProductImpl implements IHeHeProduct {
+    @Override
+    public String getToken(OcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    @Override
+    public String ocr(OcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
deleted file mode 100644
index c624918a..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.seasky.seaskyocr.domain.service.ocr;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:56
- */
-public interface OcrDomainService {
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
deleted file mode 100644
index 49238c67..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.seasky.seaskyocr.domain.service.ocr;
-
-import org.springframework.stereotype.Service;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:57
- */
-@Service
-public class OcrDomainServiceImpl implements OcrDomainService{
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
deleted file mode 100644
index 00c0212f..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
-
-/**
- * iocr宸ュ巶
- *
- * @author bandi
- * @date 2021/09/17
- */
-
- public interface IHeHeProduct {
-
-    /**
-     * 鑾峰緱浠ょ墝
-     *
-     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
-     * @return {@link String}
-     */
-    String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
-
-
-   /**
-    * 寰楀埌鍚堝悓
-    *
-    * @param contractAggregate 鍚堝悓鎬�
-    * @return {@link String}
-    */
-   String getContract(ContractAggregate contractAggregate);
-
-    /**
-     * 鏌ヨ閫氳繃鏁e垪id
-     *
-     * @param hashId 鏁e垪id
-     * @return {@link ContractAggregate}
-     */
-    ContractAggregate queryByHashId(String hashId);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
deleted file mode 100644
index d2d94048..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
-import org.springframework.stereotype.Service;
-
-
-/**
- * 闃块噷浜у搧impl
- *
- * @author bandi
- * @date 2021/09/17
- */
-@Service
-class AliProductImpl implements IAliProduct {
-    @Override
-    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-
-    @Override
-    public String ocr(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
deleted file mode 100644
index df4fe760..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.seasky.core.common.Error;
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.exception.DataAccessException;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
-import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.binary.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.omg.IOP.Encoding;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import java.util.Map;
-import org.springframework.util.ObjectUtils;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 鍚堝悎浜у搧impl
- *
- * @author bandi
- * @date 2021/09/17
- */
-@Service
-class HeHeProductImpl implements IHeHeProduct {
-
-    @Autowired
-    ContractRepository contractRepository;
-    @Autowired
-    BaseOcrRepository ocrRepository;
-
-    @Override
-    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-
-    @Override
-    public String getContract(ContractAggregate contractAggregate) {
-        byte[] bytes = new byte[0];
-        try {
-            bytes = contractAggregate.getFile().getBytes();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        String encode = Base64.encodeBase64String(bytes);
-//        Long ocrId = ocrRepository.queryOcrIdByAccountId(contractAggregate.getAccountId());
-//        if (ocrId == null){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "涓嶅瓨鍦ㄤ笌璇ョ敤鎴风浉鍏宠仈鐨凮cr", ""));
-//        }
-//        BaseOcrAggregate baseOcrAggregate = ocrRepository.queryOcrDoById(ocrId);
-//        if (baseOcrAggregate == null){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鏌ヨ涓嶅埌鐩稿叧Ocr淇℃伅", ""));
-//        }
-//        Map<String, String> head = baseOcrAggregate.getHead();
-//        head.put("app-key","18de35986509e69f1a93f5907ecdac4f");
-//        head.put("app-secret","36b0d46acf9dd9e18665a40438d6ce77");
-//        Map<String, Object> parameter = new HashMap<>();
-//        //TODO 淇敼鍙傛暟key
-////        String configuredKeys = parameter.get("4").toString();
-////        contractAggregate.getAddField().add(configuredKeys);
-//        parameter.put("configuredKeys",contractAggregate.getAddField());
-//        parameter.put("filedata",encode);
-//        parameter.put("filename",contractAggregate.getFile().getOriginalFilename());
-//        String jsonString = JSON.toJSONString(parameter);
-//        String httpPost = sendPost(baseOcrAggregate.getUrl(), jsonString, head);
-//        if (ObjectUtils.isEmpty(httpPost)){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "OCR鍥剧墖璇嗗埆澶辫触", ""));
-//        }
-//        String jsonUrl = JSONObject.parseObject(httpPost).getJSONObject("result").get("json_url").toString();
-        String jsonUrl = "https://doc-compare.intsig.com/doc_extraction/keyinfo/result?format=json&task_id=269e75f120b7ac27142456673978971a";
-        String result = sendPost(jsonUrl, null, null);
-        String content = JSONObject.parseObject(result).getJSONObject("result").get("customize_keys").toString();
-        System.out.println(JSONObject.parseObject(result).getJSONObject("result").get("stdandard_keys").toString());
-        String contractCode = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓缂栧彿").toString();
-        String contractName = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓鍚嶇О").toString();
-        String  hashId = String.valueOf(encode.hashCode());
-        ContractVO contractVO = ContractVO.builder().accountId(contractAggregate.getAccountId()).content(content).contractCode(contractCode).contractName(contractName).hashId(hashId).build();
-        contractAggregate.modify(contractVO);
-        contractRepository.save(contractAggregate);
-        return content;
-    }
-
-    /**
-     * 鏌ヨ閫氳繃鏁e垪id
-     *
-     * @param hashId 鏁e垪id
-     * @return {@link ContractAggregate}
-     */
-    @Override
-    public ContractAggregate queryByHashId(String hashId){
-        return contractRepository.queryByHashId(hashId);
-    }
-
-    /**
-     * get http post
-     *
-     * @param url      url
-     * @param jsonData json鏁版嵁
-     * @return {@link String}
-     */
-    private String sendPost(String url, String jsonData, Map<String,String> header) {
-        String result ="";
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        HttpPost httpPost = new HttpPost(url);
-        if (header != null){
-            header.forEach((key,value) -> httpPost.setHeader(key, value));
-        }
-        if (jsonData != null){
-            StringEntity entity = new StringEntity(jsonData, "UTF-8");
-            httpPost.setEntity(entity);
-        }
-        CloseableHttpResponse response = null;
-        try {
-            response = httpclient.execute(httpPost);
-            StatusLine status = response.getStatusLine();
-            if (status.getStatusCode() == HttpStatus.SC_OK) {
-                HttpEntity responseEntity = response.getEntity();
-                result = EntityUtils.toString(responseEntity);
-            }
-        }
-        catch (IOException e) {
-            e.printStackTrace();
-        }
-        return result;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
deleted file mode 100644
index b3c531b1..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.co;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 17:00
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class OcrDo {
-
-    private Long id;
-
-    private String name;
-
-    private String appKey;
-
-    private String secret;
-
-    private String url;
-
-    private String supplierEnum;
-
-    private String methodEnum;
-
-    private List<OcrBodyPO> bodyPOList;
-
-    private List<OcrHeaderPO> headerPOList;
-
-    private List<OcrParameterPO> parameterPOList;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
new file mode 100644
index 00000000..c07b0be6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
@@ -0,0 +1,4 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po;
+
+public class CardPO {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
deleted file mode 100644
index 1dbcebe3..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po.contract;
-
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.seasky.core.ddd.base.BaseDataObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 鍚堝悓璁㈠崟
- *
- * @author xiaqihang
- * @date 2021/09/18
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@TableName(value = "tb_contract",autoResultMap = true)
-public class ContractPO extends BaseDataObject {
-
-    /**
-     * 涓婚敭id
-     */
-    @TableField("id")
-    private Long id;
-
-    /**
-     * 甯愭埛id
-     */
-    @TableField("account_id")
-    private Long accountId;
-
-    /**
-     * 鏁e垪id
-     */
-    @TableField("hash_id")
-    private String hashId;
-
-    /**
-     * 鍚堝悓浠g爜
-     */
-    @TableField("contract_code")
-    private String contractCode;
-
-    /**
-     * 鍚堝悓鍚嶇О
-     */
-    @TableField("contract_name")
-    private String contractName;
-
-    /**
-     * 鍐呭
-     */
-    @TableField("content")
-    private String content;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
deleted file mode 100644
index 7d3d6713..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.seasky.core.ddd.base.BaseDataObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:41
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@TableName(value = "tb_ocr_body",autoResultMap = true)
-public class OcrBodyPO extends BaseDataObject {
-
-    @TableField("id")
-    private Long id;
-
-    @TableField("body_key")
-    private String bodyKey;
-
-    @TableField("body_value")
-    private String bodyValue;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
deleted file mode 100644
index c855e564..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.seasky.core.ddd.base.BaseDataObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:42
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@TableName(value = "tb_ocr_header",autoResultMap = true)
-public class OcrHeaderPO extends BaseDataObject {
-
-    @TableField("id")
-    private Long id;
-
-    @TableField("header_key")
-    private String headerKey;
-
-    @TableField("header_value")
-    private String headerValue;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
deleted file mode 100644
index e1f000a6..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.seasky.core.ddd.base.BaseDataObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:38
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@TableName(value = "tb_ocr",autoResultMap = true)
-public class OcrPO extends BaseDataObject {
-
-    @TableField("id")
-    private Long id;
-
-    @TableField("name")
-    private String name;
-
-    @TableField("app_key")
-    private String appKey;
-
-    @TableField("secret")
-    private String secret;
-
-    @TableField("url")
-    private String url;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
deleted file mode 100644
index c9f95174..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.seasky.core.ddd.base.BaseDataObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:43
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@TableName(value = "tb_ocr_parameter",autoResultMap = true)
-public class OcrParameterPO extends BaseDataObject {
-
-    @TableField("id")
-    private Long id;
-
-    @TableField("parameter_key")
-    private String parameterKey;
-
-    @TableField("parameter_value")
-    private String parameterValue;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
deleted file mode 100644
index a7604532..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.db.mapper.table;
-
-import com.seasky.core.base.BaseMapper;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:08
- */
-@Mapper
-public interface ContractMapper  extends BaseMapper<ContractPO> {
-
-    /**
-     * 鏌ヨ閫氳繃鏁e垪id
-     *
-     * @param hashId 鏁e垪id
-     * @return {@link ContractPO}
-     */
-    ContractPO queryByHashId(@Param("hashId") String hashId);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
deleted file mode 100644
index f447152f..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.db.mapper.table;
-
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 17:03
- */
-@Mapper
-public interface OcrMapper {
-
-    /**
-     * 閫氳繃甯愭埛id鏌ヨocr id
-     *
-     * @param id id
-     * @return {@link Long}
-     */
-    Long queryOcrIdByAccountId(@Param("id") Long id);
-
-    /**
-     * 鏌ヨocr鐨刬d
-     *
-     * @param id id
-     * @return {@link OcrDo}
-     */
-    OcrDo queryOcrDoById(@Param("id") Long id);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
deleted file mode 100644
index 41e40dd6..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper">
-
-    <select id="queryByHashId" resultType="com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO">
-        select * from tb_contract
-        <where>
-            available = 'YES'
-            <if test="hashId != null and hashId != ''">
-                and hash_id = #{hashId}
-            </if>
-        </where>
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
deleted file mode 100644
index 306cb2ba..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper">
-    
-    <resultMap id="OcrBodyHeaderParameter" type="com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo">
-        <result column="id" property="id"/>
-        <result column="name" property="name"/>
-        <result column="app_key" property="appKey"/>
-        <result column="secret" property="secret"/>
-        <result column="url" property="url"/>
-        <result column="supplierEnum" property="supplierEnum"/>
-        <result column="methodEnum" property="methodEnum"/>
-        <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
-            <id column="bodyId" property="id"/>
-            <result column="body_key" property="bodyKey"/>
-            <result column="body_value" property="bodyValue"/>
-        </collection>
-        <collection property="headerPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO">
-            <id column="headerId" property="id"/>
-            <result column="header_key" property="headerKey"/>
-            <result column="header_value" property="headerValue"/>
-        </collection>
-        <collection property="parameterPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO">
-            <id column="parameterId" property="id"/>
-            <result column="parameter_key" property="parameterKey"/>
-            <result column="parameter_value" property="parameterValue"/>
-        </collection>
-    </resultMap>
-
-    <select id="queryOcrIdByAccountId" resultType="java.lang.Long">
-        select ocr_id from tb_account_ocr
-        <where>
-            available = 'YES'
-            <if test="id != null">
-                and account_id = #{id}
-            </if>
-        </where>
-    </select>
-
-    <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
-        SELECT
-        o.id,
-        o.NAME,
-        o.app_key,
-        o.secret,
-        o.url,
-        o.supplierEnum,
-        o.methodEnum,
-        b.id AS bodyId,
-        b.body_key,
-        b.body_value,
-        h.id AS headId,
-        h.header_key,
-        h.header_value ,
-        p.id as parameterId,
-        p.parameter_key,
-        p.parameter_value
-        FROM
-        tb_ocr AS o
-        LEFT JOIN tb_ocr_body AS b ON o.id = b.ocr_id
-        LEFT JOIN tb_ocr_header AS h ON o.id = h.ocr_id
-        LEFT JOIN tb_ocr_parameter AS p ON o.id = p.ocr_id
-        <where>
-            <if test="id != null">
-                o.id = #{id}
-            </if>
-        </where>
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
deleted file mode 100644
index 3a218d5d..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.contract;
-
-import com.seasky.core.ddd.utils.MapperUtils;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:14
- */
-public class ContractConvert {
-
-    /**
-     * 鍚堝悓璁㈠崟gg
-     *
-     * @param contractPO 鍚堝悓璁㈠崟
-     * @return {@link ContractAggregate}
-     */
-    public static ContractAggregate contractPoToAgg(ContractPO contractPO){
-        return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
-    }
-
-    /**
-     * 鍚堝悓gg闃垮疂
-     *
-     * @param contractAggregate 鍚堝悓鎬�
-     * @return {@link ContractPO}
-     */
-    public static ContractPO contractAggToPo(ContractAggregate contractAggregate){
-        return MapperUtils.INSTANCE.map(ContractPO.class,contractAggregate);
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
deleted file mode 100644
index 893ca016..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.contract;
-
-import com.seasky.core.common.Error;
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.ddd.base.BaseRepository;
-import com.seasky.core.ddd.base.DomainKeysMap;
-import com.seasky.core.exception.DataAccessException;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
-import com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:05
- */
-@Repository
-public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> implements ContractRepository {
-
-    @Autowired
-    ContractMapper contractMapper;
-
-    @Override
-    protected Long baseSave(ContractAggregate aggregate) {
-        ContractPO contractPO = ContractConvert.contractAggToPo(aggregate);
-        if (contractPO.getId() == null){
-            contractPO.prepareBeforeInsert();
-            if (contractMapper.insert(contractPO) != 1){
-                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅鏂板澶辫触", ""));
-            }
-        }else{
-            contractPO.prepareBeforeUpdate();
-            if (contractMapper.updateById(contractPO) != 1){
-                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅淇敼澶辫触", ""));
-            }
-        }
-        return 1L;
-    }
-
-    @Override
-    protected void duplicateSaveViolationSift(ContractAggregate aggregate) {
-
-    }
-
-    @Override
-    protected void integritySaveViolationSift(ContractAggregate aggregate) {
-
-    }
-
-    @Override
-    protected void baseRemove(ContractAggregate aggregate) {
-
-    }
-
-    @Override
-    protected void integrityRemoveViolationSift(ContractAggregate aggregate) {
-
-    }
-
-    @Override
-    public ContractAggregate queryByHashId(String hashId) {
-        ContractPO contractPO = contractMapper.queryByHashId(hashId);
-        return ContractConvert.contractPoToAgg(contractPO);
-    }
-
-    @Override
-    public ContractAggregate findByDomainKey(DomainKeysMap domainKeysMap) {
-        return null;
-    }
-
-    @Override
-    public Boolean isExistsByDomainKey(DomainKeysMap domainKeysMap) {
-        return null;
-    }
-
-    @Override
-    public ContractAggregate findByPersistentId(Long aLong) {
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
deleted file mode 100644
index 559c294c..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.ocr;
-
-import com.seasky.core.ddd.utils.MapperUtils;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author xiaqihang
- * @date 2021/9/22 9:04
- */
-public class OcrConvert {
-
-    public static BaseOcrAggregate buildBaseOcrAgg(OcrDo ocrDo){
-        BaseOcrAggregate baseOcrAggregate = MapperUtils.INSTANCE.map(BaseOcrAggregate.class, ocrDo);
-        Map<String,String> body = new HashMap<>(6);
-        Map<String,String> head = new HashMap<>(6);
-        Map<String,Object> parameter = new HashMap<>(6);
-        ocrDo.getBodyPOList().forEach(i -> body.put(i.getBodyKey(),i.getBodyValue()));
-        ocrDo.getHeaderPOList().forEach(i -> head.put(i.getHeaderKey(),i.getHeaderValue()));
-        ocrDo.getParameterPOList().forEach(i -> parameter.put(i.getParameterKey(),i.getParameterValue()));
-        baseOcrAggregate.setBody(body);
-        baseOcrAggregate.setHead(head);
-        baseOcrAggregate.setParameter(parameter);
-        return baseOcrAggregate;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index 41168a8d..37ca738c 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -2,10 +2,6 @@ package com.seasky.seaskyocr.infrastructure.repository.ocr;
 
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-import com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
 
 /**
  * ocr搴搃mpl
@@ -13,39 +9,15 @@ import org.springframework.stereotype.Repository;
  * @author bandi
  * @date 2021/09/17
  */
-@Repository
 public class OcrRepositoryImpl implements BaseOcrRepository {
-
-    @Autowired
-    OcrMapper ocrMapper;
-
     @Override
     public void save(BaseOcrAggregate baseOcrAggregate) {
 
     }
 
-    /**
-     * 鏌ヨocr鐨刬d
-     *
-     * @param id id
-     * @return {@link OcrDo}
-     */
     @Override
-    public BaseOcrAggregate queryOcrDoById(Long id) {
-        OcrDo ocrDo = ocrMapper.queryOcrDoById(id);
-        return OcrConvert.buildBaseOcrAgg(ocrDo);
-    }
+    public void remove(Long id) {
 
-    /**
-     * 閫氳繃甯愭埛id鏌ヨocr id
-     *
-     * @param id id
-     * @return {@link Long}
-     */
-    @Override
-    public Long queryOcrIdByAccountId(Long id) {
-        return ocrMapper.queryOcrIdByAccountId(id);
     }
 
-
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
new file mode 100644
index 00000000..db9e9e8d
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
@@ -0,0 +1,35 @@
+package com.seasky.seaskyocr.infrastructure.repository.test;
+
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.test.TestAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.OcrInfoPO;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绀轰緥杞崲
+ *
+ * @author XueYawei
+ * @date 2020/12/08
+ */
+public class TestConvert {
+
+
+    /**
+     * 绀轰緥鑱氬悎鏍硅浆涓虹ず渚婸o绫�
+     *
+     * @param testAggregate 绀轰緥鑱氬悎鏍�
+     * @return {@link OcrInfoPO}
+     */
+    public static OcrInfoPO TestAggregateToTestPo(TestAggregate testAggregate){
+        //杞崲瀵瑰簲閿€糾ap
+        Map<String, String> map = new HashMap<>(3);
+        OcrInfoPO testPo = MapperUtils.INSTANCE.map(OcrInfoPO.class, testAggregate);
+
+        return testPo;
+    }
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
new file mode 100644
index 00000000..dd953009
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
@@ -0,0 +1,16 @@
+package com.seasky.seaskyocr.infrastructure.repository.test;
+
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 绀轰緥impl
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@Repository
+public class TestRepositoryImpl{
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
deleted file mode 100644
index cdd04d62..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.seasky.seaskyocr.interfaces.controller;
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.api.IContractController;
-import com.seasky.seaskyocr.application.command.contract.ContractCmdService;
-import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import static com.seasky.core.common.Response.ok;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 10:17
- */
-@Api(tags = "鍚堝悓绠$悊")
-@RestController
-@RequestMapping("contractCtrl")
-public class ContractController extends BaseController implements IContractController {
-    @Autowired
-    ContractCmdService contractCmdService;
-
-    /**
-     * 浠栫殑鍚堝悓
-     *
-     * @param file              鏂囦欢
-     * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @return {@link Result<String>}
-     */
-    @ApiOperation("鍒涘缓鍚堝悓")
-    @Override
-    public Result<String> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
-        return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
deleted file mode 100644
index 2510c193..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.seasky.seaskyocr.interfaces.controller;
-
-import com.seasky.seaskyocr.api.IOcrController;
-import com.seasky.seaskyocr.application.command.ocr.OcrCmdService;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xiaqihang
- * @date 2021/9/18 16:46
- */
-@Api(tags = "ocr绠$悊")
-@RestController
-@RequestMapping("ocrCtrl")
-public class OcrController extends BaseController implements IOcrController {
-
-    @Autowired
-    private OcrCmdService ocrCmdService;
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
new file mode 100644
index 00000000..63e6515b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
@@ -0,0 +1,102 @@
+package com.seasky.seaskyocr.interfaces.controller;
+
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.api.ITestController;
+import com.seasky.seaskyocr.application.command.ocr.TestCmdService;
+import com.seasky.seaskyocr.application.query.TestQueryService;
+import com.seasky.seaskyocr.dto.ocr.TestCmd;
+import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
+import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+import static com.seasky.core.common.Response.ok;
+
+/**
+ * 绀轰緥API
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@RestController
+@RequestMapping("test")
+public class TestController extends BaseController implements ITestController {
+
+    @Autowired
+    private TestCmdService testApplicationCmdService;
+    @Autowired
+    private TestQueryService testQueryService;
+
+    /**
+     * 鏌ヨ绀轰緥
+     *
+     * @param testQry
+     * @return {@link Result<TestQueryOut>}
+     */
+    @Override
+    public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){
+        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
+    }
+
+    /**
+     * 瀵煎嚭
+     * 涓巘estQ鍚屾牱鑾峰彇鏁版嵁,浣嗚浆鎹㈡垚涓嶅悓鏁版嵁鏍煎紡杩斿洖
+     *
+     * @param testQry
+     * @return {@link ResponseEntity<byte[]>}
+     */
+    @Override
+    public ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException {
+        List<TestQueryOut> list = testQueryService.queryTestList(testQry);
+
+        byte[] excelbyte = null; // 姝ゅ璋冪敤excel宸ュ叿绫昏浆鎴恊xcel
+        HttpHeaders header = new HttpHeaders();
+        header.add("Content-Length", "0");
+        header.add("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode("xxxnanme", "UTF-8"));
+        return new ResponseEntity<>(excelbyte, header, HttpStatus.OK);
+    }
+
+    /**
+     * 淇濆瓨鑽夌ǹ
+     *
+     * @param testCmd
+     * @return {@link Result<Long>}
+     */
+    @Override
+    public Result<Long> testSave(TestCmd testCmd) {
+        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SaveTest(testCmd));
+    }
+
+    /**
+     * 鎻愪氦
+     *
+     * @param testCmd
+     * @return {@link Result<Long>}
+     */
+    @Override
+    public Result<Long> testSubmit(TestCmd testCmd) {
+        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SubmitTest(testCmd));
+    }
+
+    /**
+     * 淇濆瓨骞舵彁浜�
+     *
+     * @param testCmd
+     * @return {@link Result<Long>}
+     */
+    @Override
+    public Result<Long> testSaveAndSubmit(TestCmd testCmd) {
+        return  ok(ResponseCode.SUCCESS, testApplicationCmdService.SavaAndSubmitTest(testCmd));
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
new file mode 100644
index 00000000..a39c490c
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
@@ -0,0 +1,65 @@
+package com.seasky.seaskyocr.interfaces.soap;
+
+import com.seasky.seaskyocr.api.ITestWebService;
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.spring.SpringBus;
+import org.apache.cxf.jaxws.EndpointImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.xml.ws.Endpoint;
+
+
+@Configuration
+public class SOAPConfig {
+    @Autowired
+    private ITestWebService testWebServiceImpl;
+
+    @Autowired
+    private ITestWebService test2WebServiceImpl;
+
+    /**
+     * Apache CXF 鏍稿績鏋舵瀯鏄互BUS涓烘牳蹇冿紝鏁村悎鍏朵粬缁勪欢銆�
+     * Bus鏄疌XF鐨勪富骞�, 涓哄叡浜祫婧愭彁渚涗竴涓彲閰嶇疆鐨勫満鎵€锛屼綔鐢ㄧ被浼间簬Spring鐨凙pplicationContext锛岃繖浜涘叡浜祫婧愬寘鎷�
+     * WSDl绠$悊鍣ㄣ€佺粦瀹氬伐鍘傜瓑銆傞€氳繃瀵笲US杩涜鎵╁睍锛屽彲浠ユ柟渚垮湴瀹圭撼鑷繁鐨勮祫婧愶紝鎴栬€呮浛鎹㈢幇鏈夌殑璧勬簮銆傞粯璁us瀹炵幇鍩轰簬Spring鏋舵瀯锛�
+     * 閫氳繃渚濊禆娉ㄥ叆锛屽湪杩愯鏃跺皢缁勪欢涓茶仈璧锋潵銆侭usFactory璐熻矗Bus鐨勫垱寤恒€傞粯璁ょ殑BusFactory鏄疭pringBusFactory锛屽搴斾簬榛樿
+     * 鐨凚us瀹炵幇銆傚湪鏋勯€犺繃绋嬩腑锛孲pringBusFactory浼氭悳绱ETA-INF/cxf锛堝寘鍚湪 CXF 鐨刯ar涓級涓嬬殑鎵€鏈塨ean閰嶇疆鏂囦欢銆�
+     * 鏍规嵁杩欎簺閰嶇疆鏂囦欢鏋勫缓涓€涓狝pplicationContext銆傚紑鍙戣€呬篃鍙互鎻愪緵鑷繁鐨勯厤缃枃浠舵潵瀹氬埗Bus銆�
+     */
+    @Bean(name = Bus.DEFAULT_BUS_ID)
+    public SpringBus springBus() {
+        return new SpringBus();
+    }
+
+    /**
+     * 姝ゆ柟娉曚綔鐢ㄦ槸鏀瑰彉椤圭洰涓湇鍔″悕鐨勫墠缂€鍚嶏紝姝ゅ127.0.0.1鎴栬€卨ocalhost涓嶈兘璁块棶鏃讹紝璇蜂娇鐢╥pconfig鏌ョ湅鏈満ip鏉ヨ闂�
+     * 姝ゆ柟娉曡娉ㄩ噴鍚�, 鍗充笉鏀瑰彉鍓嶇紑鍚�(榛樿鏄痵ervices), wsdl璁块棶鍦板潃涓� http://127.0.0.1:8080/services/ws/api?wsdl
+     * 鍘绘帀娉ㄩ噴鍚巜sdl璁块棶鍦板潃涓猴細http://127.0.0.1:8080/soap/ws/api?wsdl
+     * http://127.0.0.1:8080/soap/鍒楀嚭鏈嶅姟鍒楄〃 鎴� http://127.0.0.1:8080/soap/ws/api?wsdl 鏌ョ湅瀹為檯鐨勬湇鍔�
+     * 鏂板缓Servlet璁板緱闇€瑕佸湪鍚姩绫绘坊鍔犳敞瑙o細@ServletComponentScan
+     *
+     * 濡傛灉鍚姩鏃跺嚭鐜伴敊璇細not loaded because DispatcherServlet Registration found non dispatcher servlet dispatcherServlet
+     * 鍙兘鏄痵pringboot涓巆fx鐗堟湰涓嶅吋瀹广€�
+     * 鍚屾椂鍦╯pring boot2.0.6涔嬪悗鐨勭増鏈笌xcf闆嗘垚锛屼笉闇€瑕佸湪瀹氫箟浠ヤ笅鏂规硶锛岀洿鎺ュ湪application.properties閰嶇疆鏂囦欢涓坊鍔狅細
+     * cxf.path=/service锛堥粯璁ゆ槸services锛�
+     */
+    //@Bean
+    //public ServletRegistrationBean dispatcherServlet() {
+    //    return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
+    //}
+
+    @Bean
+    public Endpoint testendpoint() {
+        EndpointImpl endpoint = new EndpointImpl(springBus(), testWebServiceImpl);
+        endpoint.publish("/ws/api");
+        return endpoint;
+    }
+
+    @Bean
+    public Endpoint test2endpoint() {
+        EndpointImpl endpoint = new EndpointImpl(springBus(), test2WebServiceImpl);
+        endpoint.publish("/ws/api2");
+        return endpoint;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
new file mode 100644
index 00000000..f784a9cf
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
@@ -0,0 +1,26 @@
+package com.seasky.seaskyocr.interfaces.soap;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.api.ITestWebService;
+import com.seasky.seaskyocr.application.query.TestQueryService;
+import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
+import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.jws.WebService;
+import static com.seasky.core.common.Response.ok;
+
+@Component
+@WebService(name = "TestService", targetNamespace = "http://www.seaskysh.com",
+        endpointInterface = "com.seasky.dddtemplate.api.ITestWebService")
+public class TestWebService implements ITestWebService {
+    @Autowired
+    private TestQueryService testQueryService;
+
+    @Override
+    public Result<TestQueryOut> testQ(TestQueryQry testQry) {
+        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
+    }
+}
diff --git a/ServiceSite/src/main/resources/application-dev.properties b/ServiceSite/src/main/resources/application-dev.properties
index 33fd3233..d7c63f5c 100644
--- a/ServiceSite/src/main/resources/application-dev.properties
+++ b/ServiceSite/src/main/resources/application-dev.properties
@@ -1,40 +1,40 @@
-#spring.redis.host=47.110.127.118
-#spring.redis.port=6379
-#spring.redis.password=123456
-#spring.redis.database=0
-#spring.redis.lettuce.pool.max-active=50
-#spring.redis.lettuce.pool.max-idle=20
-#spring.redis.lettuce.pool.min-idle=10
-#spring.redis.lettuce.pool.max-wait=5000
-#spring.redis.lettuce.pool.time-between-eviction-runs=600000
-#
-#spring.datasource.druid.write.name=write
-#spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-#spring.datasource.druid.write.username=root
-#spring.datasource.druid.write.password=12345678
-#spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
-#spring.datasource.druid.write.initial-size=1
-#spring.datasource.druid.write.min-idle=1
-#spring.datasource.druid.write.max-active=5
-#spring.datasource.druid.write.validation-query=SELECT 1
-#spring.datasource.druid.write.validation-query-timeout=1
-#spring.datasource.druid.write.test-while-idle=true
-#spring.datasource.druid.write.test-on-borrow=true
-#spring.datasource.druid.write.test-on-return=false
-#spring.datasource.druid.write.keep-alive=true
-#spring.datasource.druid.read.name=read
-#spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-#spring.datasource.druid.read.username=root
-#spring.datasource.druid.read.password=12345678
-#spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
-#spring.datasource.druid.read.initial-size=1
-#spring.datasource.druid.read.min-idle=1
-#spring.datasource.druid.read.max-active=5
-#spring.datasource.druid.read.validation-query=SELECT 1
-#spring.datasource.druid.read.validation-query-timeout=1
-#spring.datasource.druid.read.test-while-idle=true
-#spring.datasource.druid.read.test-on-borrow=true
-#spring.datasource.druid.read.test-on-return=false
-#spring.datasource.druid.read.keep-alive=true
-#
-#
+spring.redis.host=47.110.127.118
+spring.redis.port=6379
+spring.redis.password=123456
+spring.redis.database=0
+spring.redis.lettuce.pool.max-active=50
+spring.redis.lettuce.pool.max-idle=20
+spring.redis.lettuce.pool.min-idle=10
+spring.redis.lettuce.pool.max-wait=5000
+spring.redis.lettuce.pool.time-between-eviction-runs=600000
+
+spring.datasource.druid.write.name=write
+spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+spring.datasource.druid.write.username=root
+spring.datasource.druid.write.password=12345678
+spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.druid.write.initial-size=1
+spring.datasource.druid.write.min-idle=1
+spring.datasource.druid.write.max-active=5
+spring.datasource.druid.write.validation-query=SELECT 1
+spring.datasource.druid.write.validation-query-timeout=1
+spring.datasource.druid.write.test-while-idle=true
+spring.datasource.druid.write.test-on-borrow=true
+spring.datasource.druid.write.test-on-return=false
+spring.datasource.druid.write.keep-alive=true
+spring.datasource.druid.read.name=read
+spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+spring.datasource.druid.read.username=root
+spring.datasource.druid.read.password=12345678
+spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.druid.read.initial-size=1
+spring.datasource.druid.read.min-idle=1
+spring.datasource.druid.read.max-active=5
+spring.datasource.druid.read.validation-query=SELECT 1
+spring.datasource.druid.read.validation-query-timeout=1
+spring.datasource.druid.read.test-while-idle=true
+spring.datasource.druid.read.test-on-borrow=true
+spring.datasource.druid.read.test-on-return=false
+spring.datasource.druid.read.keep-alive=true
+
+
diff --git a/ServiceSite/src/main/resources/application.properties b/ServiceSite/src/main/resources/application.properties
index 5799a02e..42e86f8d 100644
--- a/ServiceSite/src/main/resources/application.properties
+++ b/ServiceSite/src/main/resources/application.properties
@@ -1,34 +1,34 @@
-#spring.application.name=dddtemplate-provider
+spring.application.name=dddtemplate-provider
 spring.profiles.active=@env@
-#server.port=8009
-#swagger.enable=true
-#
-#mybatis-plus.global-config.db-config.db-type=mysql
-#mybatis-plus.global-config.db-config.id-type=assign_id
-#mybatis-plus.global-config.db-config.logic-delete-field=available
-#mybatis-plus.global-config.db-config.logic-delete-value='NO'
-#mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
-#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
-#mybatis-plus.configuration.call-setters-on-nulls=true
-#mybatis-plus.configuration.cache-enabled=false
-#mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
-#
-#seasky.sessionTimeout=1800
-#seasky.redislockExpire=300
-#seasky.projectVersion=1.0.0
-#seasky.cacheName=redis
-#
-#
-## 配置 DruidStatViewServlet
-#spring.datasource.druid.stat-view-servlet.enabled=true
-#spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
-## IP白名单(没有配置默认为127.0.0.1)
-#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
-## IP黑名单 (存在共同时,deny优先于allow)
-## spring.datasource.druid.deny=192.168.1.73
-## 禁用HTML页面上的“Reset All”功能
-#spring.datasource.druid.stat-view-servlet.reset-enable=false
-## druid 监控平台登录名
-#spring.datasource.druid.stat-view-servlet.login-username=druid
-## druid 监控平台登录密码
-#spring.datasource.druid.stat-view-servlet.login-password=druid
+server.port=8009
+swagger.enable=true
+
+mybatis-plus.global-config.db-config.db-type=mysql
+mybatis-plus.global-config.db-config.id-type=assign_id
+mybatis-plus.global-config.db-config.logic-delete-field=available
+mybatis-plus.global-config.db-config.logic-delete-value='NO'
+mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
+mybatis-plus.configuration.call-setters-on-nulls=true
+mybatis-plus.configuration.cache-enabled=false
+mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
+
+seasky.sessionTimeout=1800
+seasky.redislockExpire=300
+seasky.projectVersion=1.0.0
+seasky.cacheName=redis
+
+
+# 配置 DruidStatViewServlet
+spring.datasource.druid.stat-view-servlet.enabled=true
+spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
+# IP白名单(没有配置默认为127.0.0.1)
+spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
+# IP黑名单 (存在共同时,deny优先于allow)
+# spring.datasource.druid.deny=192.168.1.73
+# 禁用HTML页面上的“Reset All”功能
+spring.datasource.druid.stat-view-servlet.reset-enable=false
+# druid 监控平台登录名
+spring.datasource.druid.stat-view-servlet.login-username=druid
+# druid 监控平台登录密码
+spring.datasource.druid.stat-view-servlet.login-password=druid
diff --git a/ServiceSite/src/main/resources/bootstrap.yml b/ServiceSite/src/main/resources/bootstrap.yml
index 3db553a6..7fd252b9 100644
--- a/ServiceSite/src/main/resources/bootstrap.yml
+++ b/ServiceSite/src/main/resources/bootstrap.yml
@@ -1,20 +1,20 @@
 seasky:
   version: @version@
 server:
-  port: 8019
+  port: 8009
 spring:
   main:
     allow-bean-definition-overriding: true
   application:
-    name: ocr-manage
+    name: dddtemplate-provider
   profiles:
     active: dev
   cloud:
     nacos:
       discovery:
-        server-addr: 192.168.2.10:8848
+        server-addr: 192.168.1.80:8848
       config:
-        server-addr: 192.168.2.10:8848
+        server-addr: 192.168.1.80:8848
         file-extension: properties
     inetutils:
       preferred-networks:
diff --git a/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java b/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java
new file mode 100644
index 00000000..08ba8ec5
--- /dev/null
+++ b/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java
@@ -0,0 +1,65 @@
+package com.seasky.seaskyocr.interfaces.controller.test;
+
+import com.seasky.core.ddd.test.PoAssertions;
+import com.seasky.seaskyocr.application.command.ocr.TestCmdService;
+import com.seasky.seaskyocr.application.query.TestQueryService;
+import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.AccountMapper;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest
+@Transactional
+@Rollback
+class TestControllerTest {
+
+    @Autowired
+    private TestCmdService testCmdService;
+    @Autowired
+    private TestQueryService testQueryService;
+
+    @Autowired
+    AccountMapper accountMapper;
+
+    @ParameterizedTest
+    @MethodSource("getTCStream")
+    void testC(TestCmdTc testCase) {
+        if(testCase.getIsPositiveCase()){//鏄惁涓烘甯稿叆鍙傚璞�
+            testCmdService.SaveTest(testCase.getCmdParam());
+        }else {//寮傚父鍏ュ弬瀵硅薄鎵ц
+            assertThrows(testCase.getExpectExceptionType().getClass(),
+                    ()->testCmdService.SaveTest(testCase.getCmdParam()),testCase.getFlag());
+        }
+
+        //楠岃瘉 浠ヤ笂鎺ュ彛鏄惁鎵ц鎴愬姛
+        System.out.println(testCase.getFlag());
+        testCase.getExceptTestPoList().forEach((key,value)->{
+            PoAssertions.assertRecordCount(key, accountMapper,value,testCase.getFlag());
+        });
+
+    }
+    static Stream<TestCmdTc> getTCStream(){
+        return TestCmdFactory.getTCStream();
+    }
+
+
+    @ParameterizedTest
+    @MethodSource("getTCQryStream")
+    void testQ(TestQueryTc testCase) {
+        List<TestQueryOut> outList = testQueryService.queryTestList(testCase.getQryParam());
+        System.out.println("----杩斿洖杈撳嚭-------------========>>>"+outList.size()+"========="+outList);
+        //楠岃瘉杩斿洖鏉℃暟涓庢湡鏈涜繑鍥炴潯鏁版槸鍚︿竴鑷�
+        System.out.println(testCase.getFlag());
+        assertEquals(outList.size(),testCase.getExpectCount());
+    }
+    static Stream<TestQueryTc> getTCQryStream(){return TestQueryTcFactory.getTCQryStream();}
+}
\ No newline at end of file
-- 
GitLab


From 448b0619f51255574695e163da87648616c44f58 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Thu, 23 Sep 2021 09:37:10 +0800
Subject: [PATCH 6/8] Revert "Revert "Merge branch 'xiaqihang' into 'master'""

This reverts commit 413ef4ed7cabdc6714dbb0a70577639a0e97d5f9.
---
 ServiceSite/facade/pom.xml                    |   6 +-
 .../seaskyocr/api/IContractController.java    |  27 ++++
 .../seasky/seaskyocr/api/IOcrController.java  |   8 +
 .../seasky/seaskyocr/api/ITestController.java |  41 -----
 .../dto/contract/ContractRequestCmd.java      |  24 +++
 .../dto/contract/CreateContractCmd.java       |  29 ++++
 .../seasky/seaskyocr/enums/MethodEnum.java    |  26 +++-
 .../seasky/seaskyocr/enums/SupplierEnum.java  |  24 +++
 ServiceSite/pom.xml                           |   5 +
 .../src/main/java/com/seasky/Application.java |   6 +-
 .../{account => assembler}/TestAssembler.java |   2 +-
 .../contract/HeHeContractAssembler.java       |  15 ++
 .../command/contract/ContractCmdService.java  |  20 +++
 .../contract/ContractCmdServiceImpl.java      |  55 +++++++
 .../command/ocr/OcrCmdService.java            |   8 +
 ...erviceImpl.java => OcrCmdServiceImpl.java} |   7 +-
 .../command/ocr/TestCmdService.java           |   5 -
 .../aggregate/account/AccountRepository.java  |  16 ++
 .../aggregate/ocr/BaseOcrAggregate.java       |   8 +-
 .../aggregate/ocr/BaseOcrRepository.java      |  14 +-
 ...te.java => BaseOcrImplementAggregate.java} |   5 +-
 .../contract/ContractAggregate.java           |  78 ++++++++++
 .../contract/ContractRepository.java          |  22 +++
 .../ocrimplement/contract/ContractVO.java     |  49 ++++++
 .../domain/service/BaseOcrDomainSvr.java      |  11 --
 .../domain/service/FlowDomainServiceImpl.java |  17 --
 .../OcrFactory/Product/IHeHeProduct.java      |  33 ----
 .../ProductImpl/AliProductImpl.java           |  23 ---
 .../ProductImpl/HeHeProductImpl.java          |  22 ---
 .../domain/service/ocr/OcrDomainService.java  |   8 +
 .../service/ocr/OcrDomainServiceImpl.java     |  11 ++
 .../IOcrFactory.java                          |   6 +-
 .../OcrFactory.java                           |   8 +-
 .../Product/IAliProduct.java                  |   8 +-
 .../ocrFactory/Product/IHeHeProduct.java      |  39 +++++
 .../ProductImpl/AliProductImpl.java           |  25 +++
 .../ProductImpl/HeHeProductImpl.java          | 145 ++++++++++++++++++
 .../infrastructure/dataobject/co/OcrDo.java   |  43 ++++++
 .../infrastructure/dataobject/po/CardPO.java  |   4 -
 .../dataobject/po/contract/ContractPO.java    |  60 ++++++++
 .../dataobject/po/ocr/OcrBodyPO.java          |  30 ++++
 .../dataobject/po/ocr/OcrHeaderPO.java        |  30 ++++
 .../dataobject/po/ocr/OcrPO.java              |  36 +++++
 .../dataobject/po/ocr/OcrParameterPO.java     |  30 ++++
 .../db/mapper/table/ContractMapper.java       |  22 +++
 .../db/mapper/table/OcrMapper.java            |  29 ++++
 .../db/mapper/xml/ContractMapper.xml          |  14 ++
 .../db/mapper/xml/OcrMapper.xml               |  69 +++++++++
 .../repository/contract/ContractConvert.java  |  32 ++++
 .../contract/ContractRepositoryImpl.java      |  82 ++++++++++
 .../repository/ocr/OcrConvert.java            |  29 ++++
 .../repository/ocr/OcrRepositoryImpl.java     |  30 +++-
 .../repository/test/TestConvert.java          |  35 -----
 .../repository/test/TestRepositoryImpl.java   |  16 --
 .../controller/ContractController.java        |  42 +++++
 .../interfaces/controller/OcrController.java  |  21 +++
 .../interfaces/controller/TestController.java | 102 ------------
 .../seaskyocr/interfaces/soap/SOAPConfig.java |  65 --------
 .../interfaces/soap/TestWebService.java       |  26 ----
 .../main/resources/application-dev.properties |  80 +++++-----
 .../src/main/resources/application.properties |  66 ++++----
 ServiceSite/src/main/resources/bootstrap.yml  |   8 +-
 .../controller/test/TestControllerTest.java   |  65 --------
 63 files changed, 1352 insertions(+), 570 deletions(-)
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
 delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/{account => assembler}/TestAssembler.java (63%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/{TestCmdServiceImpl.java => OcrCmdServiceImpl.java} (50%)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/{OcrImplementAggregate.java => BaseOcrImplementAggregate.java} (73%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/IOcrFactory.java (68%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/OcrFactory.java (65%)
 rename ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/{OcrFactory => ocrFactory}/Product/IAliProduct.java (50%)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
 delete mode 100644 ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java

diff --git a/ServiceSite/facade/pom.xml b/ServiceSite/facade/pom.xml
index f591031d..f0275bf6 100644
--- a/ServiceSite/facade/pom.xml
+++ b/ServiceSite/facade/pom.xml
@@ -3,10 +3,10 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>com.seasky</groupId>
-	<artifactId>dddtemplate-api</artifactId>
+	<artifactId>seasky-ocr-api</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
-	<name>dddtemplate-api</name>
-	<description>dddtemplate-api project for dddtemplate</description>
+	<name>seasky-ocr-api</name>
+	<description>seasky-ocr-api project for dddtemplate</description>
 
 	<properties>
 		<java.version>1.8</java.version>
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
new file mode 100644
index 00000000..aea52749
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
@@ -0,0 +1,27 @@
+package com.seasky.seaskyocr.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:18
+ */
+@RequestMapping("contract")
+public interface IContractController {
+
+    /**
+     * 浠栫殑鍚堝悓
+     * 鍒涘缓浠栫殑鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @param file              鏂囦欢
+     * @return {@link Result<String>}
+     */
+    @PostMapping(path = "HeHeContract")
+    Result<String> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
new file mode 100644
index 00000000..0c726c50
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IOcrController.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.api;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:46
+ */
+public interface IOcrController {
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
deleted file mode 100644
index c48edbf0..00000000
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/ITestController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.seasky.seaskyocr.api;
-
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.dto.ocr.TestCmd;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.io.UnsupportedEncodingException;
-
-@FeignClient("dddtemplate-provider")
-@RequestMapping("test")
-@Api("Test")
-public interface ITestController {
-
-    @ApiOperation("1.testQ")
-    @PostMapping(path = "/pc/v1/queryList")
-    Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry);
-
-    @ApiOperation("2.testExport")
-    @PostMapping(path = "/pc/v1/export")
-    ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException;
-
-    @ApiOperation("3.testSave")
-    @PostMapping(path = "/pc/v1/save")
-    Result<Long> testSave(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("4.testSubmit")
-    @PostMapping(path = "/pc/v1/submit")
-    Result<Long> testSubmit(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("5.testSaveAndSubmit")
-    @PostMapping(path = "/pc/v1/saveandsubmit")
-    Result<Long> testSaveAndSubmit(@RequestBody TestCmd testCmd);
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
new file mode 100644
index 00000000..6ec90672
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/ContractRequestCmd.java
@@ -0,0 +1,24 @@
+package com.seasky.seaskyocr.dto.contract;
+
+import com.seasky.core.ddd.base.BaseDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ContractRequestCmd extends BaseDto {
+
+    private String body;
+
+    private String head;
+
+    private String parameter;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
new file mode 100644
index 00000000..8438eac0
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/dto/contract/CreateContractCmd.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.dto.contract;
+
+import com.seasky.core.ddd.base.BaseDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateContractCmd extends BaseDto {
+
+    private Long accountId;
+
+    private String methodEnum;
+
+    private String supplierEnum;
+
+    private List<String> addField;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
index 0d9172fe..de49ff6d 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/MethodEnum.java
@@ -1,4 +1,28 @@
 package com.seasky.seaskyocr.enums;
 
-public class MethodEnum {
+/**
+ * 鏂规硶鏋氫妇
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
+public enum MethodEnum {
+
+    鍚堝悓("鍚堝悓","1");
+
+    final String k;
+    final String v;
+
+    MethodEnum(final String k,final String v) {
+        this.k = k;
+        this.v = v;
+    }
+
+    public String val() {
+        return v;
+    }
+
+    public String key() {
+        return k;
+    }
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
index 1538afed..1471d5db 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/enums/SupplierEnum.java
@@ -1,4 +1,28 @@
 package com.seasky.seaskyocr.enums;
 
+/**
+ * 渚涘簲鍟嗘灇涓�
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
 public enum SupplierEnum {
+
+    鍚堝悎("鍚堝悎","1");
+
+    final String k;
+    final String v;
+
+    SupplierEnum(final String k,final String v) {
+        this.k = k;
+        this.v = v;
+    }
+
+    public String val() {
+        return v;
+    }
+
+    public String key() {
+        return k;
+    }
 }
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index 9de4d664..3ffac870 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -71,6 +71,11 @@
             <artifactId>core</artifactId>
             <version>1.4.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.seasky</groupId>
+            <artifactId>seasky-ocr-api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>com.seasky</groupId>
             <artifactId>dddtemplate-api</artifactId>
diff --git a/ServiceSite/src/main/java/com/seasky/Application.java b/ServiceSite/src/main/java/com/seasky/Application.java
index a3456b84..89aa62c5 100644
--- a/ServiceSite/src/main/java/com/seasky/Application.java
+++ b/ServiceSite/src/main/java/com/seasky/Application.java
@@ -10,13 +10,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
 /***
  * @author bandi
  * */
-@SpringBootApplication
+@SpringBootApplication(exclude = {org.apache.shiro.spring.boot.autoconfigure.ShiroAnnotationProcessorAutoConfiguration.class})
 @EnableAspectJAutoProxy(exposeProxy = true)
 @EnableDiscoveryClient
-@EnableFeignClients(basePackages = {
-        "com.seasky.some-api"
-        ,"com.seasky.other-api"
-})
 @EnableAsync
 public class Application {
 
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
similarity index 63%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
index d5f1bfdb..9bb1db82 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/account/TestAssembler.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/TestAssembler.java
@@ -1,4 +1,4 @@
-package com.seasky.seaskyocr.application.command.account;
+package com.seasky.seaskyocr.application.command.assembler;
 
 
 /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
new file mode 100644
index 00000000..bcf498a1
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/assembler/contract/HeHeContractAssembler.java
@@ -0,0 +1,15 @@
+package com.seasky.seaskyocr.application.command.assembler.contract;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 11:02
+ */
+public class HeHeContractAssembler {
+
+    public static ContractVO buildHeHeVo(CreateContractCmd heHeContractCmd){
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
new file mode 100644
index 00000000..fab84bd3
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
@@ -0,0 +1,20 @@
+package com.seasky.seaskyocr.application.command.contract;
+
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:32
+ */
+public interface ContractCmdService {
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @param file              鏂囦欢
+     * @return {@link String}
+     */
+    String createContract(MultipartFile file, CreateContractCmd createContractCmd);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
new file mode 100644
index 00000000..1f710d9a
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -0,0 +1,55 @@
+package com.seasky.seaskyocr.application.command.contract;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import com.seasky.seaskyocr.enums.SupplierEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Encoder;
+
+import java.io.IOException;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:34
+ */
+@Service
+public class ContractCmdServiceImpl implements ContractCmdService {
+
+    @Autowired
+    IOcrFactory iOcrFactory;
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @param file              鏂囦欢
+     * @return {@link String}
+     */
+    @Override
+    public String createContract(MultipartFile file, CreateContractCmd createContractCmd) {
+        try {
+            byte[] bytes = file.getBytes();
+            String encode = new BASE64Encoder().encode(bytes);
+            String hashId = String.valueOf(encode.hashCode());
+            if (createContractCmd.getSupplierEnum().equals(SupplierEnum.鍚堝悎.val())){
+                IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+                //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
+                ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
+                if (contractAggregate != null){
+                    //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥� contractAggregate杞琌ut
+                    return null;
+                }
+                ContractAggregate aggregate = ContractAggregate.builder().build();
+                aggregate.create(createContractCmd.getAccountId(),file,createContractCmd.getAddField());
+                heHeProduct.getContract(aggregate);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
new file mode 100644
index 00000000..20c3d3e3
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdService.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.application.command.ocr;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:48
+ */
+public interface OcrCmdService {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
similarity index 50%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
index 4a54650d..8199f11b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/OcrCmdServiceImpl.java
@@ -2,7 +2,10 @@ package com.seasky.seaskyocr.application.command.ocr;
 
 import org.springframework.stereotype.Service;
 
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:48
+ */
 @Service
-public class TestCmdServiceImpl implements TestCmdService {
-
+public class OcrCmdServiceImpl implements OcrCmdService{
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
deleted file mode 100644
index 2d11dba0..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/ocr/TestCmdService.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.seasky.seaskyocr.application.command.ocr;
-
-public interface TestCmdService {
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
new file mode 100644
index 00000000..db04fe62
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/account/AccountRepository.java
@@ -0,0 +1,16 @@
+package com.seasky.seaskyocr.domain.aggregate.account;
+
+/**
+ * 璐︽埛瀛樺偍搴�
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+public interface AccountRepository {
+    /**
+     * 淇濆瓨
+     *
+     * @param accountAggregate 璐︽埛鎬�
+     */
+    void save(AccountAggregate accountAggregate);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
index 639be2aa..36c7144b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
@@ -2,8 +2,10 @@ package com.seasky.seaskyocr.domain.aggregate.ocr;
 
 import com.seasky.seaskyocr.enums.MethodEnum;
 import com.seasky.seaskyocr.enums.SupplierEnum;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
@@ -15,19 +17,21 @@ import java.util.Map;
  */
 @Data
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class BaseOcrAggregate {
     private Long id;
     private String name;
     private String appKey;
     private String secret;
     private String url;
-    private String contentType;
+//    private String contentType;
     private SupplierEnum supplierEnum;
     private MethodEnum methodEnum;
 
     private Map<String,String> body;
     private Map<String,String> head;
-    private Map<String,String> parameter;
+    private Map<String,Object> parameter;
 
     public void  updateAgg(BaseOcrVO vo){
         //todo 鎵€鏈夊睘鎬ц祴鍊�
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
index b00919c7..8b2e927b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
@@ -1,5 +1,7 @@
 package com.seasky.seaskyocr.domain.aggregate.ocr;
 
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
 /**
  * 鍩虹ocr搴�
  *
@@ -17,11 +19,19 @@ public interface BaseOcrRepository {
     void save(BaseOcrAggregate baseOcrAggregate);
 
     /**
-     * 鍒犻櫎
+     * 鏌ヨocr鐨刬d
      *
      * @param id id
+     * @return {@link OcrDo}
      */
-    void remove(Long id);
+    BaseOcrAggregate queryOcrDoById(Long id);
 
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    Long queryOcrIdByAccountId(Long id);
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java
similarity index 73%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java
index 1eae551e..489f67db 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/OcrImplementAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/BaseOcrImplementAggregate.java
@@ -8,7 +8,10 @@ import com.seasky.core.ddd.base.BaseAggregate;
  * @author bandi
  * @date 2021/09/17
  */
-public class OcrImplementAggregate extends BaseAggregate {
+public class BaseOcrImplementAggregate extends BaseAggregate {
+
+    public String hashId;
+
     @Override
     protected String iniDescribeName() {
         return null;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
new file mode 100644
index 00000000..595c8f0b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
@@ -0,0 +1,78 @@
+package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import lombok.Builder;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 鍚堝悓鎬�
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+@Builder
+@Data
+public class ContractAggregate extends BaseOcrImplementAggregate {
+
+    /**
+     * 鍚堝悓id
+     */
+    private Long id;
+
+    /**
+     * 璐︽埛id
+     */
+    private Long accountId;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    private String contractName;
+
+    /**
+     * 鍚堝悓缂栧彿
+     */
+    private String contractCode;
+
+    /**
+     * 鍐呭
+     */
+    private String content;
+
+    /**
+     * 鏂囦欢
+     */
+    private MultipartFile file;
+
+    /**
+     * 瑕佹煡璇㈢殑瀛楁
+     */
+    private List<String> addField;
+
+    /**
+     * 鍒涘缓鍚堝悓
+     *
+     * @param accountId 甯愭埛id
+     */
+    public void create(Long accountId, MultipartFile file, List<String> addField){
+        this.accountId = accountId;
+        this.file = file;
+        this.addField = addField;
+    }
+
+    /**
+     * 淇敼鍚堝悓
+     *
+     * @param contractVO 鍚堝悓绛捐瘉瀹�
+     */
+    public void modify(ContractVO contractVO){
+        this.contractName = contractVO.getContractName();
+        this.contractCode = contractVO.getContractCode();
+        this.hashId = contractVO.getHashId();
+        this.content = contractVO.getContent();
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
new file mode 100644
index 00000000..6aaa8022
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
@@ -0,0 +1,22 @@
+package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
+
+import com.seasky.core.ddd.base.DddRepository;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+
+/**
+ * 鍩虹ocr搴�
+ *
+ * @author bandi
+ * @date 2021/09/14
+ */
+public interface ContractRepository extends DddRepository<ContractAggregate> {
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
+     */
+    ContractAggregate queryByHashId(String hashId);
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
new file mode 100644
index 00000000..e2f0d7a7
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
@@ -0,0 +1,49 @@
+package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鍚堝悓绛捐瘉瀹�
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ContractVO {
+
+    /**
+     * 鍚堝悓id
+     */
+    private Long id;
+
+    /**
+     * 璐︽埛id
+     */
+    private Long accountId;
+
+    /**
+     * 鏁e垪id
+     */
+    private String hashId;
+
+    /**
+     * 鍚堝悓浠g爜
+     */
+    private String contractCode;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    private String contractName;
+
+    /**
+     * 鍐呭
+     */
+    private String content;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
deleted file mode 100644
index 32ecdd85..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/BaseOcrDomainSvr.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.seasky.seaskyocr.domain.service;
-
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-
-public interface BaseOcrDomainSvr<T extends BaseOcrAggregate> {
-
-     String ocr(T agg);
-
-
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
deleted file mode 100644
index 8c3d9136..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/FlowDomainServiceImpl.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.seasky.seaskyocr.domain.service;
-
-import com.seasky.seaskyocr.domain.event.DeleteTestEvent;
-import org.springframework.context.event.EventListener;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-@Service
-public class FlowDomainServiceImpl {
-
-    @EventListener
-    @Order(0)
-    public void deleteTestVerify(DeleteTestEvent event) {
-        // 杩涜鍒犻櫎test鐨勬牎楠�
-        System.out.println("娴佺▼鏀跺埌鍒犻櫎浜嬩欢锛屽弬鏁�:" + event.getSource());//鑾峰彇鍙傛暟
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
deleted file mode 100644
index 504dde3b..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IHeHeProduct.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
-
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * iocr宸ュ巶
- *
- * @author bandi
- * @date 2021/09/17
- */
-
- public interface IHeHeProduct {
-
-    /**
-     * 鑾峰緱浠ょ墝
-     *
-     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
-     * @return {@link String}
-     */
-    public String getToken(OcrImplementAggregate ocrImplementAggregate);
-
-
-    /**
-     * 鍏夊瀛楃璇嗗埆
-     *
-     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
-     * @return {@link String}
-     */
-    public String ocr(OcrImplementAggregate ocrImplementAggregate);
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
deleted file mode 100644
index 07651089..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/AliProductImpl.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
-
-
-/**
- * 闃块噷浜у搧impl
- *
- * @author bandi
- * @date 2021/09/17
- */
-class AliProductImpl implements IAliProduct {
-    @Override
-    public String getToken(OcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-
-    @Override
-    public String ocr(OcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
deleted file mode 100644
index 69b16fad..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/ProductImpl/HeHeProductImpl.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.ProductImpl;
-
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
-
-/**
- * 鍚堝悎浜у搧impl
- *
- * @author bandi
- * @date 2021/09/17
- */
-class HeHeProductImpl implements IHeHeProduct {
-    @Override
-    public String getToken(OcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-
-    @Override
-    public String ocr(OcrImplementAggregate ocrImplementAggregate) {
-        return null;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
new file mode 100644
index 00000000..c624918a
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainService.java
@@ -0,0 +1,8 @@
+package com.seasky.seaskyocr.domain.service.ocr;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:56
+ */
+public interface OcrDomainService {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
new file mode 100644
index 00000000..49238c67
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocr/OcrDomainServiceImpl.java
@@ -0,0 +1,11 @@
+package com.seasky.seaskyocr.domain.service.ocr;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:57
+ */
+@Service
+public class OcrDomainServiceImpl implements OcrDomainService{
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
similarity index 68%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
index af406b7b..e26e9f71 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/IOcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/IOcrFactory.java
@@ -1,7 +1,7 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory;
+package com.seasky.seaskyocr.domain.service.ocrFactory;
 
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 
 /**
  * iocr宸ュ巶
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
similarity index 65%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
index fdd2e3c6..42324c2a 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/OcrFactory.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/OcrFactory.java
@@ -1,7 +1,8 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory;
+package com.seasky.seaskyocr.domain.service.ocrFactory;
 
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IAliProduct;
-import com.seasky.seaskyocr.domain.service.OcrFactory.Product.IHeHeProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 
@@ -11,6 +12,7 @@ import javax.annotation.Resource;
  * @author bandi
  * @date 2021/09/17
  */
+@Component
 public class OcrFactory implements IOcrFactory {
 
      @Resource
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
similarity index 50%
rename from ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
rename to ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
index adbaeaaf..f3d5ea81 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/OcrFactory/Product/IAliProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IAliProduct.java
@@ -1,6 +1,6 @@
-package com.seasky.seaskyocr.domain.service.OcrFactory.Product;
+package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
 
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.OcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 
 public interface IAliProduct {
     /**
@@ -9,7 +9,7 @@ public interface IAliProduct {
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String getToken(OcrImplementAggregate ocrImplementAggregate);
+    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
 
 
     /**
@@ -18,5 +18,5 @@ public interface IAliProduct {
      * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
      * @return {@link String}
      */
-    public String ocr(OcrImplementAggregate ocrImplementAggregate);
+    public String ocr(BaseOcrImplementAggregate ocrImplementAggregate);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
new file mode 100644
index 00000000..00c0212f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
@@ -0,0 +1,39 @@
+package com.seasky.seaskyocr.domain.service.ocrFactory.Product;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+
+/**
+ * iocr宸ュ巶
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+
+ public interface IHeHeProduct {
+
+    /**
+     * 鑾峰緱浠ょ墝
+     *
+     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
+     * @return {@link String}
+     */
+    String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
+
+
+   /**
+    * 寰楀埌鍚堝悓
+    *
+    * @param contractAggregate 鍚堝悓鎬�
+    * @return {@link String}
+    */
+   String getContract(ContractAggregate contractAggregate);
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
+     */
+    ContractAggregate queryByHashId(String hashId);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
new file mode 100644
index 00000000..d2d94048
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/AliProductImpl.java
@@ -0,0 +1,25 @@
+package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
+
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IAliProduct;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 闃块噷浜у搧impl
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+@Service
+class AliProductImpl implements IAliProduct {
+    @Override
+    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    @Override
+    public String ocr(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
new file mode 100644
index 00000000..df4fe760
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
@@ -0,0 +1,145 @@
+package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataAccessException;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
+import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.omg.IOP.Encoding;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import org.springframework.util.ObjectUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鍚堝悎浜у搧impl
+ *
+ * @author bandi
+ * @date 2021/09/17
+ */
+@Service
+class HeHeProductImpl implements IHeHeProduct {
+
+    @Autowired
+    ContractRepository contractRepository;
+    @Autowired
+    BaseOcrRepository ocrRepository;
+
+    @Override
+    public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
+    }
+
+    @Override
+    public String getContract(ContractAggregate contractAggregate) {
+        byte[] bytes = new byte[0];
+        try {
+            bytes = contractAggregate.getFile().getBytes();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        String encode = Base64.encodeBase64String(bytes);
+//        Long ocrId = ocrRepository.queryOcrIdByAccountId(contractAggregate.getAccountId());
+//        if (ocrId == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "涓嶅瓨鍦ㄤ笌璇ョ敤鎴风浉鍏宠仈鐨凮cr", ""));
+//        }
+//        BaseOcrAggregate baseOcrAggregate = ocrRepository.queryOcrDoById(ocrId);
+//        if (baseOcrAggregate == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鏌ヨ涓嶅埌鐩稿叧Ocr淇℃伅", ""));
+//        }
+//        Map<String, String> head = baseOcrAggregate.getHead();
+//        head.put("app-key","18de35986509e69f1a93f5907ecdac4f");
+//        head.put("app-secret","36b0d46acf9dd9e18665a40438d6ce77");
+//        Map<String, Object> parameter = new HashMap<>();
+//        //TODO 淇敼鍙傛暟key
+////        String configuredKeys = parameter.get("4").toString();
+////        contractAggregate.getAddField().add(configuredKeys);
+//        parameter.put("configuredKeys",contractAggregate.getAddField());
+//        parameter.put("filedata",encode);
+//        parameter.put("filename",contractAggregate.getFile().getOriginalFilename());
+//        String jsonString = JSON.toJSONString(parameter);
+//        String httpPost = sendPost(baseOcrAggregate.getUrl(), jsonString, head);
+//        if (ObjectUtils.isEmpty(httpPost)){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "OCR鍥剧墖璇嗗埆澶辫触", ""));
+//        }
+//        String jsonUrl = JSONObject.parseObject(httpPost).getJSONObject("result").get("json_url").toString();
+        String jsonUrl = "https://doc-compare.intsig.com/doc_extraction/keyinfo/result?format=json&task_id=269e75f120b7ac27142456673978971a";
+        String result = sendPost(jsonUrl, null, null);
+        String content = JSONObject.parseObject(result).getJSONObject("result").get("customize_keys").toString();
+        System.out.println(JSONObject.parseObject(result).getJSONObject("result").get("stdandard_keys").toString());
+        String contractCode = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓缂栧彿").toString();
+        String contractName = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓鍚嶇О").toString();
+        String  hashId = String.valueOf(encode.hashCode());
+        ContractVO contractVO = ContractVO.builder().accountId(contractAggregate.getAccountId()).content(content).contractCode(contractCode).contractName(contractName).hashId(hashId).build();
+        contractAggregate.modify(contractVO);
+        contractRepository.save(contractAggregate);
+        return content;
+    }
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractAggregate}
+     */
+    @Override
+    public ContractAggregate queryByHashId(String hashId){
+        return contractRepository.queryByHashId(hashId);
+    }
+
+    /**
+     * get http post
+     *
+     * @param url      url
+     * @param jsonData json鏁版嵁
+     * @return {@link String}
+     */
+    private String sendPost(String url, String jsonData, Map<String,String> header) {
+        String result ="";
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+        if (header != null){
+            header.forEach((key,value) -> httpPost.setHeader(key, value));
+        }
+        if (jsonData != null){
+            StringEntity entity = new StringEntity(jsonData, "UTF-8");
+            httpPost.setEntity(entity);
+        }
+        CloseableHttpResponse response = null;
+        try {
+            response = httpclient.execute(httpPost);
+            StatusLine status = response.getStatusLine();
+            if (status.getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity responseEntity = response.getEntity();
+                result = EntityUtils.toString(responseEntity);
+            }
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
new file mode 100644
index 00000000..b3c531b1
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
@@ -0,0 +1,43 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.co;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 17:00
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OcrDo {
+
+    private Long id;
+
+    private String name;
+
+    private String appKey;
+
+    private String secret;
+
+    private String url;
+
+    private String supplierEnum;
+
+    private String methodEnum;
+
+    private List<OcrBodyPO> bodyPOList;
+
+    private List<OcrHeaderPO> headerPOList;
+
+    private List<OcrParameterPO> parameterPOList;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
deleted file mode 100644
index c07b0be6..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/CardPO.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.dataobject.po;
-
-public class CardPO {
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
new file mode 100644
index 00000000..1dbcebe3
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/contract/ContractPO.java
@@ -0,0 +1,60 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.contract;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鍚堝悓璁㈠崟
+ *
+ * @author xiaqihang
+ * @date 2021/09/18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_contract",autoResultMap = true)
+public class ContractPO extends BaseDataObject {
+
+    /**
+     * 涓婚敭id
+     */
+    @TableField("id")
+    private Long id;
+
+    /**
+     * 甯愭埛id
+     */
+    @TableField("account_id")
+    private Long accountId;
+
+    /**
+     * 鏁e垪id
+     */
+    @TableField("hash_id")
+    private String hashId;
+
+    /**
+     * 鍚堝悓浠g爜
+     */
+    @TableField("contract_code")
+    private String contractCode;
+
+    /**
+     * 鍚堝悓鍚嶇О
+     */
+    @TableField("contract_name")
+    private String contractName;
+
+    /**
+     * 鍐呭
+     */
+    @TableField("content")
+    private String content;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
new file mode 100644
index 00000000..7d3d6713
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrBodyPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:41
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_body",autoResultMap = true)
+public class OcrBodyPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("body_key")
+    private String bodyKey;
+
+    @TableField("body_value")
+    private String bodyValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
new file mode 100644
index 00000000..c855e564
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrHeaderPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:42
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_header",autoResultMap = true)
+public class OcrHeaderPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("header_key")
+    private String headerKey;
+
+    @TableField("header_value")
+    private String headerValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
new file mode 100644
index 00000000..e1f000a6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrPO.java
@@ -0,0 +1,36 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:38
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr",autoResultMap = true)
+public class OcrPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("app_key")
+    private String appKey;
+
+    @TableField("secret")
+    private String secret;
+
+    @TableField("url")
+    private String url;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
new file mode 100644
index 00000000..c9f95174
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/po/ocr/OcrParameterPO.java
@@ -0,0 +1,30 @@
+package com.seasky.seaskyocr.infrastructure.dataobject.po.ocr;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:43
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_ocr_parameter",autoResultMap = true)
+public class OcrParameterPO extends BaseDataObject {
+
+    @TableField("id")
+    private Long id;
+
+    @TableField("parameter_key")
+    private String parameterKey;
+
+    @TableField("parameter_value")
+    private String parameterValue;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
new file mode 100644
index 00000000..a7604532
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/ContractMapper.java
@@ -0,0 +1,22 @@
+package com.seasky.seaskyocr.infrastructure.db.mapper.table;
+
+import com.seasky.core.base.BaseMapper;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:08
+ */
+@Mapper
+public interface ContractMapper  extends BaseMapper<ContractPO> {
+
+    /**
+     * 鏌ヨ閫氳繃鏁e垪id
+     *
+     * @param hashId 鏁e垪id
+     * @return {@link ContractPO}
+     */
+    ContractPO queryByHashId(@Param("hashId") String hashId);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
new file mode 100644
index 00000000..f447152f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/table/OcrMapper.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.infrastructure.db.mapper.table;
+
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 17:03
+ */
+@Mapper
+public interface OcrMapper {
+
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    Long queryOcrIdByAccountId(@Param("id") Long id);
+
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    OcrDo queryOcrDoById(@Param("id") Long id);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
new file mode 100644
index 00000000..41e40dd6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/ContractMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper">
+
+    <select id="queryByHashId" resultType="com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO">
+        select * from tb_contract
+        <where>
+            available = 'YES'
+            <if test="hashId != null and hashId != ''">
+                and hash_id = #{hashId}
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
new file mode 100644
index 00000000..306cb2ba
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper">
+    
+    <resultMap id="OcrBodyHeaderParameter" type="com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="app_key" property="appKey"/>
+        <result column="secret" property="secret"/>
+        <result column="url" property="url"/>
+        <result column="supplierEnum" property="supplierEnum"/>
+        <result column="methodEnum" property="methodEnum"/>
+        <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
+            <id column="bodyId" property="id"/>
+            <result column="body_key" property="bodyKey"/>
+            <result column="body_value" property="bodyValue"/>
+        </collection>
+        <collection property="headerPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrHeaderPO">
+            <id column="headerId" property="id"/>
+            <result column="header_key" property="headerKey"/>
+            <result column="header_value" property="headerValue"/>
+        </collection>
+        <collection property="parameterPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrParameterPO">
+            <id column="parameterId" property="id"/>
+            <result column="parameter_key" property="parameterKey"/>
+            <result column="parameter_value" property="parameterValue"/>
+        </collection>
+    </resultMap>
+
+    <select id="queryOcrIdByAccountId" resultType="java.lang.Long">
+        select ocr_id from tb_account_ocr
+        <where>
+            available = 'YES'
+            <if test="id != null">
+                and account_id = #{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
+        SELECT
+        o.id,
+        o.NAME,
+        o.app_key,
+        o.secret,
+        o.url,
+        o.supplierEnum,
+        o.methodEnum,
+        b.id AS bodyId,
+        b.body_key,
+        b.body_value,
+        h.id AS headId,
+        h.header_key,
+        h.header_value ,
+        p.id as parameterId,
+        p.parameter_key,
+        p.parameter_value
+        FROM
+        tb_ocr AS o
+        LEFT JOIN tb_ocr_body AS b ON o.id = b.ocr_id
+        LEFT JOIN tb_ocr_header AS h ON o.id = h.ocr_id
+        LEFT JOIN tb_ocr_parameter AS p ON o.id = p.ocr_id
+        <where>
+            <if test="id != null">
+                o.id = #{id}
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
new file mode 100644
index 00000000..3a218d5d
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
@@ -0,0 +1,32 @@
+package com.seasky.seaskyocr.infrastructure.repository.contract;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:14
+ */
+public class ContractConvert {
+
+    /**
+     * 鍚堝悓璁㈠崟gg
+     *
+     * @param contractPO 鍚堝悓璁㈠崟
+     * @return {@link ContractAggregate}
+     */
+    public static ContractAggregate contractPoToAgg(ContractPO contractPO){
+        return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
+    }
+
+    /**
+     * 鍚堝悓gg闃垮疂
+     *
+     * @param contractAggregate 鍚堝悓鎬�
+     * @return {@link ContractPO}
+     */
+    public static ContractPO contractAggToPo(ContractAggregate contractAggregate){
+        return MapperUtils.INSTANCE.map(ContractPO.class,contractAggregate);
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
new file mode 100644
index 00000000..893ca016
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
@@ -0,0 +1,82 @@
+package com.seasky.seaskyocr.infrastructure.repository.contract;
+
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.ddd.base.BaseRepository;
+import com.seasky.core.ddd.base.DomainKeysMap;
+import com.seasky.core.exception.DataAccessException;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.ContractMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:05
+ */
+@Repository
+public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> implements ContractRepository {
+
+    @Autowired
+    ContractMapper contractMapper;
+
+    @Override
+    protected Long baseSave(ContractAggregate aggregate) {
+        ContractPO contractPO = ContractConvert.contractAggToPo(aggregate);
+        if (contractPO.getId() == null){
+            contractPO.prepareBeforeInsert();
+            if (contractMapper.insert(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅鏂板澶辫触", ""));
+            }
+        }else{
+            contractPO.prepareBeforeUpdate();
+            if (contractMapper.updateById(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅淇敼澶辫触", ""));
+            }
+        }
+        return 1L;
+    }
+
+    @Override
+    protected void duplicateSaveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void integritySaveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void baseRemove(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    protected void integrityRemoveViolationSift(ContractAggregate aggregate) {
+
+    }
+
+    @Override
+    public ContractAggregate queryByHashId(String hashId) {
+        ContractPO contractPO = contractMapper.queryByHashId(hashId);
+        return ContractConvert.contractPoToAgg(contractPO);
+    }
+
+    @Override
+    public ContractAggregate findByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    @Override
+    public Boolean isExistsByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    @Override
+    public ContractAggregate findByPersistentId(Long aLong) {
+        return null;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
new file mode 100644
index 00000000..559c294c
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.infrastructure.repository.ocr;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/22 9:04
+ */
+public class OcrConvert {
+
+    public static BaseOcrAggregate buildBaseOcrAgg(OcrDo ocrDo){
+        BaseOcrAggregate baseOcrAggregate = MapperUtils.INSTANCE.map(BaseOcrAggregate.class, ocrDo);
+        Map<String,String> body = new HashMap<>(6);
+        Map<String,String> head = new HashMap<>(6);
+        Map<String,Object> parameter = new HashMap<>(6);
+        ocrDo.getBodyPOList().forEach(i -> body.put(i.getBodyKey(),i.getBodyValue()));
+        ocrDo.getHeaderPOList().forEach(i -> head.put(i.getHeaderKey(),i.getHeaderValue()));
+        ocrDo.getParameterPOList().forEach(i -> parameter.put(i.getParameterKey(),i.getParameterValue()));
+        baseOcrAggregate.setBody(body);
+        baseOcrAggregate.setHead(head);
+        baseOcrAggregate.setParameter(parameter);
+        return baseOcrAggregate;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index 37ca738c..41168a8d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -2,6 +2,10 @@ package com.seasky.seaskyocr.infrastructure.repository.ocr;
 
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 /**
  * ocr搴搃mpl
@@ -9,15 +13,39 @@ import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
  * @author bandi
  * @date 2021/09/17
  */
+@Repository
 public class OcrRepositoryImpl implements BaseOcrRepository {
+
+    @Autowired
+    OcrMapper ocrMapper;
+
     @Override
     public void save(BaseOcrAggregate baseOcrAggregate) {
 
     }
 
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
     @Override
-    public void remove(Long id) {
+    public BaseOcrAggregate queryOcrDoById(Long id) {
+        OcrDo ocrDo = ocrMapper.queryOcrDoById(id);
+        return OcrConvert.buildBaseOcrAgg(ocrDo);
+    }
 
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    @Override
+    public Long queryOcrIdByAccountId(Long id) {
+        return ocrMapper.queryOcrIdByAccountId(id);
     }
 
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
deleted file mode 100644
index db9e9e8d..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestConvert.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.test;
-
-
-import com.seasky.core.ddd.utils.MapperUtils;
-import com.seasky.seaskyocr.domain.aggregate.test.TestAggregate;
-import com.seasky.seaskyocr.infrastructure.dataobject.po.OcrInfoPO;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 绀轰緥杞崲
- *
- * @author XueYawei
- * @date 2020/12/08
- */
-public class TestConvert {
-
-
-    /**
-     * 绀轰緥鑱氬悎鏍硅浆涓虹ず渚婸o绫�
-     *
-     * @param testAggregate 绀轰緥鑱氬悎鏍�
-     * @return {@link OcrInfoPO}
-     */
-    public static OcrInfoPO TestAggregateToTestPo(TestAggregate testAggregate){
-        //杞崲瀵瑰簲閿€糾ap
-        Map<String, String> map = new HashMap<>(3);
-        OcrInfoPO testPo = MapperUtils.INSTANCE.map(OcrInfoPO.class, testAggregate);
-
-        return testPo;
-    }
-
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
deleted file mode 100644
index dd953009..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/test/TestRepositoryImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.test;
-
-
-import org.springframework.stereotype.Repository;
-
-/**
- * 绀轰緥impl
- *
- * @author XueYawei
- * @date 2020/12/07
- */
-@Repository
-public class TestRepositoryImpl{
-
-
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
new file mode 100644
index 00000000..cdd04d62
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
@@ -0,0 +1,42 @@
+package com.seasky.seaskyocr.interfaces.controller;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.seaskyocr.api.IContractController;
+import com.seasky.seaskyocr.application.command.contract.ContractCmdService;
+import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import static com.seasky.core.common.Response.ok;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 10:17
+ */
+@Api(tags = "鍚堝悓绠$悊")
+@RestController
+@RequestMapping("contractCtrl")
+public class ContractController extends BaseController implements IContractController {
+    @Autowired
+    ContractCmdService contractCmdService;
+
+    /**
+     * 浠栫殑鍚堝悓
+     *
+     * @param file              鏂囦欢
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @return {@link Result<String>}
+     */
+    @ApiOperation("鍒涘缓鍚堝悓")
+    @Override
+    public Result<String> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
+        return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
new file mode 100644
index 00000000..2510c193
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/OcrController.java
@@ -0,0 +1,21 @@
+package com.seasky.seaskyocr.interfaces.controller;
+
+import com.seasky.seaskyocr.api.IOcrController;
+import com.seasky.seaskyocr.application.command.ocr.OcrCmdService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/18 16:46
+ */
+@Api(tags = "ocr绠$悊")
+@RestController
+@RequestMapping("ocrCtrl")
+public class OcrController extends BaseController implements IOcrController {
+
+    @Autowired
+    private OcrCmdService ocrCmdService;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
deleted file mode 100644
index 63e6515b..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/TestController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.seasky.seaskyocr.interfaces.controller;
-
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.api.ITestController;
-import com.seasky.seaskyocr.application.command.ocr.TestCmdService;
-import com.seasky.seaskyocr.application.query.TestQueryService;
-import com.seasky.seaskyocr.dto.ocr.TestCmd;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.List;
-
-import static com.seasky.core.common.Response.ok;
-
-/**
- * 绀轰緥API
- *
- * @author XueYawei
- * @date 2020/12/07
- */
-@RestController
-@RequestMapping("test")
-public class TestController extends BaseController implements ITestController {
-
-    @Autowired
-    private TestCmdService testApplicationCmdService;
-    @Autowired
-    private TestQueryService testQueryService;
-
-    /**
-     * 鏌ヨ绀轰緥
-     *
-     * @param testQry
-     * @return {@link Result<TestQueryOut>}
-     */
-    @Override
-    public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){
-        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
-    }
-
-    /**
-     * 瀵煎嚭
-     * 涓巘estQ鍚屾牱鑾峰彇鏁版嵁,浣嗚浆鎹㈡垚涓嶅悓鏁版嵁鏍煎紡杩斿洖
-     *
-     * @param testQry
-     * @return {@link ResponseEntity<byte[]>}
-     */
-    @Override
-    public ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException {
-        List<TestQueryOut> list = testQueryService.queryTestList(testQry);
-
-        byte[] excelbyte = null; // 姝ゅ璋冪敤excel宸ュ叿绫昏浆鎴恊xcel
-        HttpHeaders header = new HttpHeaders();
-        header.add("Content-Length", "0");
-        header.add("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode("xxxnanme", "UTF-8"));
-        return new ResponseEntity<>(excelbyte, header, HttpStatus.OK);
-    }
-
-    /**
-     * 淇濆瓨鑽夌ǹ
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSave(TestCmd testCmd) {
-        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SaveTest(testCmd));
-    }
-
-    /**
-     * 鎻愪氦
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSubmit(TestCmd testCmd) {
-        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SubmitTest(testCmd));
-    }
-
-    /**
-     * 淇濆瓨骞舵彁浜�
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSaveAndSubmit(TestCmd testCmd) {
-        return  ok(ResponseCode.SUCCESS, testApplicationCmdService.SavaAndSubmitTest(testCmd));
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
deleted file mode 100644
index a39c490c..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/SOAPConfig.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.seasky.seaskyocr.interfaces.soap;
-
-import com.seasky.seaskyocr.api.ITestWebService;
-import org.apache.cxf.Bus;
-import org.apache.cxf.bus.spring.SpringBus;
-import org.apache.cxf.jaxws.EndpointImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.xml.ws.Endpoint;
-
-
-@Configuration
-public class SOAPConfig {
-    @Autowired
-    private ITestWebService testWebServiceImpl;
-
-    @Autowired
-    private ITestWebService test2WebServiceImpl;
-
-    /**
-     * Apache CXF 鏍稿績鏋舵瀯鏄互BUS涓烘牳蹇冿紝鏁村悎鍏朵粬缁勪欢銆�
-     * Bus鏄疌XF鐨勪富骞�, 涓哄叡浜祫婧愭彁渚涗竴涓彲閰嶇疆鐨勫満鎵€锛屼綔鐢ㄧ被浼间簬Spring鐨凙pplicationContext锛岃繖浜涘叡浜祫婧愬寘鎷�
-     * WSDl绠$悊鍣ㄣ€佺粦瀹氬伐鍘傜瓑銆傞€氳繃瀵笲US杩涜鎵╁睍锛屽彲浠ユ柟渚垮湴瀹圭撼鑷繁鐨勮祫婧愶紝鎴栬€呮浛鎹㈢幇鏈夌殑璧勬簮銆傞粯璁us瀹炵幇鍩轰簬Spring鏋舵瀯锛�
-     * 閫氳繃渚濊禆娉ㄥ叆锛屽湪杩愯鏃跺皢缁勪欢涓茶仈璧锋潵銆侭usFactory璐熻矗Bus鐨勫垱寤恒€傞粯璁ょ殑BusFactory鏄疭pringBusFactory锛屽搴斾簬榛樿
-     * 鐨凚us瀹炵幇銆傚湪鏋勯€犺繃绋嬩腑锛孲pringBusFactory浼氭悳绱ETA-INF/cxf锛堝寘鍚湪 CXF 鐨刯ar涓級涓嬬殑鎵€鏈塨ean閰嶇疆鏂囦欢銆�
-     * 鏍规嵁杩欎簺閰嶇疆鏂囦欢鏋勫缓涓€涓狝pplicationContext銆傚紑鍙戣€呬篃鍙互鎻愪緵鑷繁鐨勯厤缃枃浠舵潵瀹氬埗Bus銆�
-     */
-    @Bean(name = Bus.DEFAULT_BUS_ID)
-    public SpringBus springBus() {
-        return new SpringBus();
-    }
-
-    /**
-     * 姝ゆ柟娉曚綔鐢ㄦ槸鏀瑰彉椤圭洰涓湇鍔″悕鐨勫墠缂€鍚嶏紝姝ゅ127.0.0.1鎴栬€卨ocalhost涓嶈兘璁块棶鏃讹紝璇蜂娇鐢╥pconfig鏌ョ湅鏈満ip鏉ヨ闂�
-     * 姝ゆ柟娉曡娉ㄩ噴鍚�, 鍗充笉鏀瑰彉鍓嶇紑鍚�(榛樿鏄痵ervices), wsdl璁块棶鍦板潃涓� http://127.0.0.1:8080/services/ws/api?wsdl
-     * 鍘绘帀娉ㄩ噴鍚巜sdl璁块棶鍦板潃涓猴細http://127.0.0.1:8080/soap/ws/api?wsdl
-     * http://127.0.0.1:8080/soap/鍒楀嚭鏈嶅姟鍒楄〃 鎴� http://127.0.0.1:8080/soap/ws/api?wsdl 鏌ョ湅瀹為檯鐨勬湇鍔�
-     * 鏂板缓Servlet璁板緱闇€瑕佸湪鍚姩绫绘坊鍔犳敞瑙o細@ServletComponentScan
-     *
-     * 濡傛灉鍚姩鏃跺嚭鐜伴敊璇細not loaded because DispatcherServlet Registration found non dispatcher servlet dispatcherServlet
-     * 鍙兘鏄痵pringboot涓巆fx鐗堟湰涓嶅吋瀹广€�
-     * 鍚屾椂鍦╯pring boot2.0.6涔嬪悗鐨勭増鏈笌xcf闆嗘垚锛屼笉闇€瑕佸湪瀹氫箟浠ヤ笅鏂规硶锛岀洿鎺ュ湪application.properties閰嶇疆鏂囦欢涓坊鍔狅細
-     * cxf.path=/service锛堥粯璁ゆ槸services锛�
-     */
-    //@Bean
-    //public ServletRegistrationBean dispatcherServlet() {
-    //    return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
-    //}
-
-    @Bean
-    public Endpoint testendpoint() {
-        EndpointImpl endpoint = new EndpointImpl(springBus(), testWebServiceImpl);
-        endpoint.publish("/ws/api");
-        return endpoint;
-    }
-
-    @Bean
-    public Endpoint test2endpoint() {
-        EndpointImpl endpoint = new EndpointImpl(springBus(), test2WebServiceImpl);
-        endpoint.publish("/ws/api2");
-        return endpoint;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
deleted file mode 100644
index f784a9cf..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/soap/TestWebService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.seasky.seaskyocr.interfaces.soap;
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.seaskyocr.api.ITestWebService;
-import com.seasky.seaskyocr.application.query.TestQueryService;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.dto.ocr.TestQueryQry;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.jws.WebService;
-import static com.seasky.core.common.Response.ok;
-
-@Component
-@WebService(name = "TestService", targetNamespace = "http://www.seaskysh.com",
-        endpointInterface = "com.seasky.dddtemplate.api.ITestWebService")
-public class TestWebService implements ITestWebService {
-    @Autowired
-    private TestQueryService testQueryService;
-
-    @Override
-    public Result<TestQueryOut> testQ(TestQueryQry testQry) {
-        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
-    }
-}
diff --git a/ServiceSite/src/main/resources/application-dev.properties b/ServiceSite/src/main/resources/application-dev.properties
index d7c63f5c..33fd3233 100644
--- a/ServiceSite/src/main/resources/application-dev.properties
+++ b/ServiceSite/src/main/resources/application-dev.properties
@@ -1,40 +1,40 @@
-spring.redis.host=47.110.127.118
-spring.redis.port=6379
-spring.redis.password=123456
-spring.redis.database=0
-spring.redis.lettuce.pool.max-active=50
-spring.redis.lettuce.pool.max-idle=20
-spring.redis.lettuce.pool.min-idle=10
-spring.redis.lettuce.pool.max-wait=5000
-spring.redis.lettuce.pool.time-between-eviction-runs=600000
-
-spring.datasource.druid.write.name=write
-spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-spring.datasource.druid.write.username=root
-spring.datasource.druid.write.password=12345678
-spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.druid.write.initial-size=1
-spring.datasource.druid.write.min-idle=1
-spring.datasource.druid.write.max-active=5
-spring.datasource.druid.write.validation-query=SELECT 1
-spring.datasource.druid.write.validation-query-timeout=1
-spring.datasource.druid.write.test-while-idle=true
-spring.datasource.druid.write.test-on-borrow=true
-spring.datasource.druid.write.test-on-return=false
-spring.datasource.druid.write.keep-alive=true
-spring.datasource.druid.read.name=read
-spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
-spring.datasource.druid.read.username=root
-spring.datasource.druid.read.password=12345678
-spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.druid.read.initial-size=1
-spring.datasource.druid.read.min-idle=1
-spring.datasource.druid.read.max-active=5
-spring.datasource.druid.read.validation-query=SELECT 1
-spring.datasource.druid.read.validation-query-timeout=1
-spring.datasource.druid.read.test-while-idle=true
-spring.datasource.druid.read.test-on-borrow=true
-spring.datasource.druid.read.test-on-return=false
-spring.datasource.druid.read.keep-alive=true
-
-
+#spring.redis.host=47.110.127.118
+#spring.redis.port=6379
+#spring.redis.password=123456
+#spring.redis.database=0
+#spring.redis.lettuce.pool.max-active=50
+#spring.redis.lettuce.pool.max-idle=20
+#spring.redis.lettuce.pool.min-idle=10
+#spring.redis.lettuce.pool.max-wait=5000
+#spring.redis.lettuce.pool.time-between-eviction-runs=600000
+#
+#spring.datasource.druid.write.name=write
+#spring.datasource.druid.write.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+#spring.datasource.druid.write.username=root
+#spring.datasource.druid.write.password=12345678
+#spring.datasource.druid.write.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.druid.write.initial-size=1
+#spring.datasource.druid.write.min-idle=1
+#spring.datasource.druid.write.max-active=5
+#spring.datasource.druid.write.validation-query=SELECT 1
+#spring.datasource.druid.write.validation-query-timeout=1
+#spring.datasource.druid.write.test-while-idle=true
+#spring.datasource.druid.write.test-on-borrow=true
+#spring.datasource.druid.write.test-on-return=false
+#spring.datasource.druid.write.keep-alive=true
+#spring.datasource.druid.read.name=read
+#spring.datasource.druid.read.url=jdbc:mysql://47.111.224.180:8306/DDDTest?characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT
+#spring.datasource.druid.read.username=root
+#spring.datasource.druid.read.password=12345678
+#spring.datasource.druid.read.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.druid.read.initial-size=1
+#spring.datasource.druid.read.min-idle=1
+#spring.datasource.druid.read.max-active=5
+#spring.datasource.druid.read.validation-query=SELECT 1
+#spring.datasource.druid.read.validation-query-timeout=1
+#spring.datasource.druid.read.test-while-idle=true
+#spring.datasource.druid.read.test-on-borrow=true
+#spring.datasource.druid.read.test-on-return=false
+#spring.datasource.druid.read.keep-alive=true
+#
+#
diff --git a/ServiceSite/src/main/resources/application.properties b/ServiceSite/src/main/resources/application.properties
index 42e86f8d..5799a02e 100644
--- a/ServiceSite/src/main/resources/application.properties
+++ b/ServiceSite/src/main/resources/application.properties
@@ -1,34 +1,34 @@
-spring.application.name=dddtemplate-provider
+#spring.application.name=dddtemplate-provider
 spring.profiles.active=@env@
-server.port=8009
-swagger.enable=true
-
-mybatis-plus.global-config.db-config.db-type=mysql
-mybatis-plus.global-config.db-config.id-type=assign_id
-mybatis-plus.global-config.db-config.logic-delete-field=available
-mybatis-plus.global-config.db-config.logic-delete-value='NO'
-mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
-mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
-mybatis-plus.configuration.call-setters-on-nulls=true
-mybatis-plus.configuration.cache-enabled=false
-mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
-
-seasky.sessionTimeout=1800
-seasky.redislockExpire=300
-seasky.projectVersion=1.0.0
-seasky.cacheName=redis
-
-
-# 配置 DruidStatViewServlet
-spring.datasource.druid.stat-view-servlet.enabled=true
-spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
-# IP白名单(没有配置默认为127.0.0.1)
-spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
-# IP黑名单 (存在共同时,deny优先于allow)
-# spring.datasource.druid.deny=192.168.1.73
-# 禁用HTML页面上的“Reset All”功能
-spring.datasource.druid.stat-view-servlet.reset-enable=false
-# druid 监控平台登录名
-spring.datasource.druid.stat-view-servlet.login-username=druid
-# druid 监控平台登录密码
-spring.datasource.druid.stat-view-servlet.login-password=druid
+#server.port=8009
+#swagger.enable=true
+#
+#mybatis-plus.global-config.db-config.db-type=mysql
+#mybatis-plus.global-config.db-config.id-type=assign_id
+#mybatis-plus.global-config.db-config.logic-delete-field=available
+#mybatis-plus.global-config.db-config.logic-delete-value='NO'
+#mybatis-plus.global-config.db-config.logic-not-delete-value='YES'
+#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
+#mybatis-plus.configuration.call-setters-on-nulls=true
+#mybatis-plus.configuration.cache-enabled=false
+#mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
+#
+#seasky.sessionTimeout=1800
+#seasky.redislockExpire=300
+#seasky.projectVersion=1.0.0
+#seasky.cacheName=redis
+#
+#
+## 配置 DruidStatViewServlet
+#spring.datasource.druid.stat-view-servlet.enabled=true
+#spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
+## IP白名单(没有配置默认为127.0.0.1)
+#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
+## IP黑名单 (存在共同时,deny优先于allow)
+## spring.datasource.druid.deny=192.168.1.73
+## 禁用HTML页面上的“Reset All”功能
+#spring.datasource.druid.stat-view-servlet.reset-enable=false
+## druid 监控平台登录名
+#spring.datasource.druid.stat-view-servlet.login-username=druid
+## druid 监控平台登录密码
+#spring.datasource.druid.stat-view-servlet.login-password=druid
diff --git a/ServiceSite/src/main/resources/bootstrap.yml b/ServiceSite/src/main/resources/bootstrap.yml
index 7fd252b9..3db553a6 100644
--- a/ServiceSite/src/main/resources/bootstrap.yml
+++ b/ServiceSite/src/main/resources/bootstrap.yml
@@ -1,20 +1,20 @@
 seasky:
   version: @version@
 server:
-  port: 8009
+  port: 8019
 spring:
   main:
     allow-bean-definition-overriding: true
   application:
-    name: dddtemplate-provider
+    name: ocr-manage
   profiles:
     active: dev
   cloud:
     nacos:
       discovery:
-        server-addr: 192.168.1.80:8848
+        server-addr: 192.168.2.10:8848
       config:
-        server-addr: 192.168.1.80:8848
+        server-addr: 192.168.2.10:8848
         file-extension: properties
     inetutils:
       preferred-networks:
diff --git a/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java b/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java
deleted file mode 100644
index 08ba8ec5..00000000
--- a/ServiceSite/src/test/java/com/seasky/seaskyocr/interfaces/controller/test/TestControllerTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.seasky.seaskyocr.interfaces.controller.test;
-
-import com.seasky.core.ddd.test.PoAssertions;
-import com.seasky.seaskyocr.application.command.ocr.TestCmdService;
-import com.seasky.seaskyocr.application.query.TestQueryService;
-import com.seasky.seaskyocr.dto.ocr.TestQueryOut;
-import com.seasky.seaskyocr.infrastructure.db.mapper.table.AccountMapper;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.annotation.Rollback;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-@SpringBootTest
-@Transactional
-@Rollback
-class TestControllerTest {
-
-    @Autowired
-    private TestCmdService testCmdService;
-    @Autowired
-    private TestQueryService testQueryService;
-
-    @Autowired
-    AccountMapper accountMapper;
-
-    @ParameterizedTest
-    @MethodSource("getTCStream")
-    void testC(TestCmdTc testCase) {
-        if(testCase.getIsPositiveCase()){//鏄惁涓烘甯稿叆鍙傚璞�
-            testCmdService.SaveTest(testCase.getCmdParam());
-        }else {//寮傚父鍏ュ弬瀵硅薄鎵ц
-            assertThrows(testCase.getExpectExceptionType().getClass(),
-                    ()->testCmdService.SaveTest(testCase.getCmdParam()),testCase.getFlag());
-        }
-
-        //楠岃瘉 浠ヤ笂鎺ュ彛鏄惁鎵ц鎴愬姛
-        System.out.println(testCase.getFlag());
-        testCase.getExceptTestPoList().forEach((key,value)->{
-            PoAssertions.assertRecordCount(key, accountMapper,value,testCase.getFlag());
-        });
-
-    }
-    static Stream<TestCmdTc> getTCStream(){
-        return TestCmdFactory.getTCStream();
-    }
-
-
-    @ParameterizedTest
-    @MethodSource("getTCQryStream")
-    void testQ(TestQueryTc testCase) {
-        List<TestQueryOut> outList = testQueryService.queryTestList(testCase.getQryParam());
-        System.out.println("----杩斿洖杈撳嚭-------------========>>>"+outList.size()+"========="+outList);
-        //楠岃瘉杩斿洖鏉℃暟涓庢湡鏈涜繑鍥炴潯鏁版槸鍚︿竴鑷�
-        System.out.println(testCase.getFlag());
-        assertEquals(outList.size(),testCase.getExpectCount());
-    }
-    static Stream<TestQueryTc> getTCQryStream(){return TestQueryTcFactory.getTCQryStream();}
-}
\ No newline at end of file
-- 
GitLab


From a54dd12e81a2a0b96aa48a953072d7f6e08ed231 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Thu, 23 Sep 2021 09:39:27 +0800
Subject: [PATCH 7/8] =?UTF-8?q?Revert=20"fix=EF=BC=9A=E7=BC=96=E5=86=99ocr?=
 =?UTF-8?q?=E8=AF=86=E5=88=AB=E6=8E=A5=E5=8F=A3=EF=BC=8Cdomain=E5=B1=82"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit df1961d1ae291e3ee93ede7ceaf1e634553f0632.
---
 .../seaskyocr/api/IContractController.java    |   4 +-
 .../command/contract/ContractCmdService.java  |   4 +-
 .../contract/ContractCmdServiceImpl.java      |  23 ++--
 .../aggregate/ocr/BaseOcrAggregate.java       |   8 +-
 .../aggregate/ocr/BaseOcrRepository.java      |  16 ---
 .../contract/ContractAggregate.java           |  37 ++----
 .../contract/ContractRepository.java          |   1 +
 .../ocrimplement/contract/ContractVO.java     |   9 --
 .../ocrFactory/Product/IHeHeProduct.java      |  14 +--
 .../ProductImpl/HeHeProductImpl.java          | 108 +-----------------
 .../infrastructure/dataobject/co/OcrDo.java   |   4 -
 .../db/mapper/xml/OcrMapper.xml               |  30 +----
 .../repository/contract/ContractConvert.java  |  16 ---
 .../contract/ContractRepositoryImpl.java      |  17 +--
 .../repository/ocr/OcrConvert.java            |  29 -----
 .../repository/ocr/OcrRepositoryImpl.java     |  33 ------
 .../controller/ContractController.java        |   9 +-
 17 files changed, 39 insertions(+), 323 deletions(-)
 delete mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java

diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
index aea52749..92b8adeb 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
@@ -20,8 +20,8 @@ public interface IContractController {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link Result<String>}
+     * @return {@link Result<Long>}
      */
     @PostMapping(path = "HeHeContract")
-    Result<String> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
+    Result<Long> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
index fab84bd3..657d0b67 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
@@ -14,7 +14,7 @@ public interface ContractCmdService {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link String}
+     * @return {@link Long}
      */
-    String createContract(MultipartFile file, CreateContractCmd createContractCmd);
+    Long createContract(MultipartFile file, CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
index 1f710d9a..ccf028ca 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -4,7 +4,6 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
 import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
-import com.seasky.seaskyocr.enums.SupplierEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -26,26 +25,20 @@ public class ContractCmdServiceImpl implements ContractCmdService {
      * 鍒涘缓鍚堝悓
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @param file              鏂囦欢
-     * @return {@link String}
+     * @return {@link Long}
      */
     @Override
-    public String createContract(MultipartFile file, CreateContractCmd createContractCmd) {
+    public Long createContract(MultipartFile file, CreateContractCmd createContractCmd) {
+        IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
         try {
             byte[] bytes = file.getBytes();
             String encode = new BASE64Encoder().encode(bytes);
             String hashId = String.valueOf(encode.hashCode());
-            if (createContractCmd.getSupplierEnum().equals(SupplierEnum.鍚堝悎.val())){
-                IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
-                //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
-                ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
-                if (contractAggregate != null){
-                    //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥� contractAggregate杞琌ut
-                    return null;
-                }
-                ContractAggregate aggregate = ContractAggregate.builder().build();
-                aggregate.create(createContractCmd.getAccountId(),file,createContractCmd.getAddField());
-                heHeProduct.getContract(aggregate);
+            //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
+            ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
+            if (contractAggregate != null){
+                //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥�
+                return null;
             }
         } catch (IOException e) {
             e.printStackTrace();
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
index 36c7144b..639be2aa 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
@@ -2,10 +2,8 @@ package com.seasky.seaskyocr.domain.aggregate.ocr;
 
 import com.seasky.seaskyocr.enums.MethodEnum;
 import com.seasky.seaskyocr.enums.SupplierEnum;
-import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
@@ -17,21 +15,19 @@ import java.util.Map;
  */
 @Data
 @Builder
-@AllArgsConstructor
-@NoArgsConstructor
 public class BaseOcrAggregate {
     private Long id;
     private String name;
     private String appKey;
     private String secret;
     private String url;
-//    private String contentType;
+    private String contentType;
     private SupplierEnum supplierEnum;
     private MethodEnum methodEnum;
 
     private Map<String,String> body;
     private Map<String,String> head;
-    private Map<String,Object> parameter;
+    private Map<String,String> parameter;
 
     public void  updateAgg(BaseOcrVO vo){
         //todo 鎵€鏈夊睘鎬ц祴鍊�
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
index 8b2e927b..1dd0dd6c 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
@@ -1,7 +1,5 @@
 package com.seasky.seaskyocr.domain.aggregate.ocr;
 
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-
 /**
  * 鍩虹ocr搴�
  *
@@ -18,20 +16,6 @@ public interface BaseOcrRepository {
      */
     void save(BaseOcrAggregate baseOcrAggregate);
 
-    /**
-     * 鏌ヨocr鐨刬d
-     *
-     * @param id id
-     * @return {@link OcrDo}
-     */
-    BaseOcrAggregate queryOcrDoById(Long id);
 
-    /**
-     * 閫氳繃甯愭埛id鏌ヨocr id
-     *
-     * @param id id
-     * @return {@link Long}
-     */
-    Long queryOcrIdByAccountId(Long id);
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
index 595c8f0b..ce70ec35 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
@@ -3,9 +3,6 @@ package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import lombok.Builder;
 import lombok.Data;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 
 /**
  * 鍚堝悓鎬�
@@ -28,51 +25,39 @@ public class ContractAggregate extends BaseOcrImplementAggregate {
     private Long accountId;
 
     /**
-     * 鍚堝悓鍚嶇О
+     * 鍚堝悓浠g爜
      */
-    private String contractName;
+    private String contractCode;
 
     /**
-     * 鍚堝悓缂栧彿
+     * 鍚堝悓鍚嶇О
      */
-    private String contractCode;
+    private String contractName;
 
     /**
      * 鍐呭
      */
     private String content;
 
-    /**
-     * 鏂囦欢
-     */
-    private MultipartFile file;
-
-    /**
-     * 瑕佹煡璇㈢殑瀛楁
-     */
-    private List<String> addField;
-
     /**
      * 鍒涘缓鍚堝悓
      *
      * @param accountId 甯愭埛id
      */
-    public void create(Long accountId, MultipartFile file, List<String> addField){
+    public void create(Long accountId){
         this.accountId = accountId;
-        this.file = file;
-        this.addField = addField;
     }
 
     /**
      * 淇敼鍚堝悓
      *
-     * @param contractVO 鍚堝悓绛捐瘉瀹�
+     * @param contractCode 鍚堝悓浠g爜
+     * @param contractName 鍚堝悓鍚嶇О
      */
-    public void modify(ContractVO contractVO){
-        this.contractName = contractVO.getContractName();
-        this.contractCode = contractVO.getContractCode();
-        this.hashId = contractVO.getHashId();
-        this.content = contractVO.getContent();
+    public void modify(String contractCode, String contractName, String hashId){
+        this.contractCode = contractCode;
+        this.contractName = contractName;
+        this.hashId = hashId;
     }
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
index 6aaa8022..22ad8ee7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
@@ -19,4 +19,5 @@ public interface ContractRepository extends DddRepository<ContractAggregate> {
      */
     ContractAggregate queryByHashId(String hashId);
 
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
index e2f0d7a7..1249f482 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
@@ -1,20 +1,11 @@
 package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
 /**
  * 鍚堝悓绛捐瘉瀹�
  *
  * @author bandi
  * @date 2021/09/17
  */
-@Builder
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
 public class ContractVO {
 
     /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
index 00c0212f..1a2f976b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
@@ -21,13 +21,13 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
     String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
 
 
-   /**
-    * 寰楀埌鍚堝悓
-    *
-    * @param contractAggregate 鍚堝悓鎬�
-    * @return {@link String}
-    */
-   String getContract(ContractAggregate contractAggregate);
+    /**
+     * 鍏夊瀛楃璇嗗埆
+     *
+     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
+     * @return {@link String}
+     */
+    String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
 
     /**
      * 鏌ヨ閫氳繃鏁e垪id
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
index df4fe760..0786a9ca 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
@@ -1,38 +1,11 @@
 package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.seasky.core.common.Error;
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.exception.DataAccessException;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
-import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.binary.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.omg.IOP.Encoding;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.Map;
-import org.springframework.util.ObjectUtils;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * 鍚堝悎浜у搧impl
@@ -45,8 +18,6 @@ class HeHeProductImpl implements IHeHeProduct {
 
     @Autowired
     ContractRepository contractRepository;
-    @Autowired
-    BaseOcrRepository ocrRepository;
 
     @Override
     public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
@@ -54,49 +25,8 @@ class HeHeProductImpl implements IHeHeProduct {
     }
 
     @Override
-    public String getContract(ContractAggregate contractAggregate) {
-        byte[] bytes = new byte[0];
-        try {
-            bytes = contractAggregate.getFile().getBytes();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        String encode = Base64.encodeBase64String(bytes);
-//        Long ocrId = ocrRepository.queryOcrIdByAccountId(contractAggregate.getAccountId());
-//        if (ocrId == null){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "涓嶅瓨鍦ㄤ笌璇ョ敤鎴风浉鍏宠仈鐨凮cr", ""));
-//        }
-//        BaseOcrAggregate baseOcrAggregate = ocrRepository.queryOcrDoById(ocrId);
-//        if (baseOcrAggregate == null){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鏌ヨ涓嶅埌鐩稿叧Ocr淇℃伅", ""));
-//        }
-//        Map<String, String> head = baseOcrAggregate.getHead();
-//        head.put("app-key","18de35986509e69f1a93f5907ecdac4f");
-//        head.put("app-secret","36b0d46acf9dd9e18665a40438d6ce77");
-//        Map<String, Object> parameter = new HashMap<>();
-//        //TODO 淇敼鍙傛暟key
-////        String configuredKeys = parameter.get("4").toString();
-////        contractAggregate.getAddField().add(configuredKeys);
-//        parameter.put("configuredKeys",contractAggregate.getAddField());
-//        parameter.put("filedata",encode);
-//        parameter.put("filename",contractAggregate.getFile().getOriginalFilename());
-//        String jsonString = JSON.toJSONString(parameter);
-//        String httpPost = sendPost(baseOcrAggregate.getUrl(), jsonString, head);
-//        if (ObjectUtils.isEmpty(httpPost)){
-//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "OCR鍥剧墖璇嗗埆澶辫触", ""));
-//        }
-//        String jsonUrl = JSONObject.parseObject(httpPost).getJSONObject("result").get("json_url").toString();
-        String jsonUrl = "https://doc-compare.intsig.com/doc_extraction/keyinfo/result?format=json&task_id=269e75f120b7ac27142456673978971a";
-        String result = sendPost(jsonUrl, null, null);
-        String content = JSONObject.parseObject(result).getJSONObject("result").get("customize_keys").toString();
-        System.out.println(JSONObject.parseObject(result).getJSONObject("result").get("stdandard_keys").toString());
-        String contractCode = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓缂栧彿").toString();
-        String contractName = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓鍚嶇О").toString();
-        String  hashId = String.valueOf(encode.hashCode());
-        ContractVO contractVO = ContractVO.builder().accountId(contractAggregate.getAccountId()).content(content).contractCode(contractCode).contractName(contractName).hashId(hashId).build();
-        contractAggregate.modify(contractVO);
-        contractRepository.save(contractAggregate);
-        return content;
+    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate) {
+        return null;
     }
 
     /**
@@ -109,37 +39,5 @@ class HeHeProductImpl implements IHeHeProduct {
     public ContractAggregate queryByHashId(String hashId){
         return contractRepository.queryByHashId(hashId);
     }
-
-    /**
-     * get http post
-     *
-     * @param url      url
-     * @param jsonData json鏁版嵁
-     * @return {@link String}
-     */
-    private String sendPost(String url, String jsonData, Map<String,String> header) {
-        String result ="";
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        HttpPost httpPost = new HttpPost(url);
-        if (header != null){
-            header.forEach((key,value) -> httpPost.setHeader(key, value));
-        }
-        if (jsonData != null){
-            StringEntity entity = new StringEntity(jsonData, "UTF-8");
-            httpPost.setEntity(entity);
-        }
-        CloseableHttpResponse response = null;
-        try {
-            response = httpclient.execute(httpPost);
-            StatusLine status = response.getStatusLine();
-            if (status.getStatusCode() == HttpStatus.SC_OK) {
-                HttpEntity responseEntity = response.getEntity();
-                result = EntityUtils.toString(responseEntity);
-            }
-        }
-        catch (IOException e) {
-            e.printStackTrace();
-        }
-        return result;
-    }
+    
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
index b3c531b1..7506b41b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
@@ -31,10 +31,6 @@ public class OcrDo {
 
     private String url;
 
-    private String supplierEnum;
-
-    private String methodEnum;
-
     private List<OcrBodyPO> bodyPOList;
 
     private List<OcrHeaderPO> headerPOList;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
index 306cb2ba..c812f319 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
@@ -8,8 +8,6 @@
         <result column="app_key" property="appKey"/>
         <result column="secret" property="secret"/>
         <result column="url" property="url"/>
-        <result column="supplierEnum" property="supplierEnum"/>
-        <result column="methodEnum" property="methodEnum"/>
         <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
             <id column="bodyId" property="id"/>
             <result column="body_key" property="bodyKey"/>
@@ -38,32 +36,6 @@
     </select>
 
     <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
-        SELECT
-        o.id,
-        o.NAME,
-        o.app_key,
-        o.secret,
-        o.url,
-        o.supplierEnum,
-        o.methodEnum,
-        b.id AS bodyId,
-        b.body_key,
-        b.body_value,
-        h.id AS headId,
-        h.header_key,
-        h.header_value ,
-        p.id as parameterId,
-        p.parameter_key,
-        p.parameter_value
-        FROM
-        tb_ocr AS o
-        LEFT JOIN tb_ocr_body AS b ON o.id = b.ocr_id
-        LEFT JOIN tb_ocr_header AS h ON o.id = h.ocr_id
-        LEFT JOIN tb_ocr_parameter AS p ON o.id = p.ocr_id
-        <where>
-            <if test="id != null">
-                o.id = #{id}
-            </if>
-        </where>
+
     </select>
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
index 3a218d5d..44463ee7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
@@ -10,23 +10,7 @@ import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
  */
 public class ContractConvert {
 
-    /**
-     * 鍚堝悓璁㈠崟gg
-     *
-     * @param contractPO 鍚堝悓璁㈠崟
-     * @return {@link ContractAggregate}
-     */
     public static ContractAggregate contractPoToAgg(ContractPO contractPO){
         return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
     }
-
-    /**
-     * 鍚堝悓gg闃垮疂
-     *
-     * @param contractAggregate 鍚堝悓鎬�
-     * @return {@link ContractPO}
-     */
-    public static ContractPO contractAggToPo(ContractAggregate contractAggregate){
-        return MapperUtils.INSTANCE.map(ContractPO.class,contractAggregate);
-    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
index 893ca016..dae2fc57 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
@@ -1,10 +1,7 @@
 package com.seasky.seaskyocr.infrastructure.repository.contract;
 
-import com.seasky.core.common.Error;
-import com.seasky.core.common.ResponseCode;
 import com.seasky.core.ddd.base.BaseRepository;
 import com.seasky.core.ddd.base.DomainKeysMap;
-import com.seasky.core.exception.DataAccessException;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
 import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
@@ -24,19 +21,7 @@ public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> im
 
     @Override
     protected Long baseSave(ContractAggregate aggregate) {
-        ContractPO contractPO = ContractConvert.contractAggToPo(aggregate);
-        if (contractPO.getId() == null){
-            contractPO.prepareBeforeInsert();
-            if (contractMapper.insert(contractPO) != 1){
-                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅鏂板澶辫触", ""));
-            }
-        }else{
-            contractPO.prepareBeforeUpdate();
-            if (contractMapper.updateById(contractPO) != 1){
-                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅淇敼澶辫触", ""));
-            }
-        }
-        return 1L;
+        return null;
     }
 
     @Override
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
deleted file mode 100644
index 559c294c..00000000
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.seasky.seaskyocr.infrastructure.repository.ocr;
-
-import com.seasky.core.ddd.utils.MapperUtils;
-import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author xiaqihang
- * @date 2021/9/22 9:04
- */
-public class OcrConvert {
-
-    public static BaseOcrAggregate buildBaseOcrAgg(OcrDo ocrDo){
-        BaseOcrAggregate baseOcrAggregate = MapperUtils.INSTANCE.map(BaseOcrAggregate.class, ocrDo);
-        Map<String,String> body = new HashMap<>(6);
-        Map<String,String> head = new HashMap<>(6);
-        Map<String,Object> parameter = new HashMap<>(6);
-        ocrDo.getBodyPOList().forEach(i -> body.put(i.getBodyKey(),i.getBodyValue()));
-        ocrDo.getHeaderPOList().forEach(i -> head.put(i.getHeaderKey(),i.getHeaderValue()));
-        ocrDo.getParameterPOList().forEach(i -> parameter.put(i.getParameterKey(),i.getParameterValue()));
-        baseOcrAggregate.setBody(body);
-        baseOcrAggregate.setHead(head);
-        baseOcrAggregate.setParameter(parameter);
-        return baseOcrAggregate;
-    }
-}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index 41168a8d..c5aac1f9 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -2,10 +2,6 @@ package com.seasky.seaskyocr.infrastructure.repository.ocr;
 
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
-import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
-import com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
 
 /**
  * ocr搴搃mpl
@@ -13,39 +9,10 @@ import org.springframework.stereotype.Repository;
  * @author bandi
  * @date 2021/09/17
  */
-@Repository
 public class OcrRepositoryImpl implements BaseOcrRepository {
-
-    @Autowired
-    OcrMapper ocrMapper;
-
     @Override
     public void save(BaseOcrAggregate baseOcrAggregate) {
 
     }
 
-    /**
-     * 鏌ヨocr鐨刬d
-     *
-     * @param id id
-     * @return {@link OcrDo}
-     */
-    @Override
-    public BaseOcrAggregate queryOcrDoById(Long id) {
-        OcrDo ocrDo = ocrMapper.queryOcrDoById(id);
-        return OcrConvert.buildBaseOcrAgg(ocrDo);
-    }
-
-    /**
-     * 閫氳繃甯愭埛id鏌ヨocr id
-     *
-     * @param id id
-     * @return {@link Long}
-     */
-    @Override
-    public Long queryOcrIdByAccountId(Long id) {
-        return ocrMapper.queryOcrIdByAccountId(id);
-    }
-
-
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
index cdd04d62..0cc821ae 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
@@ -27,16 +27,9 @@ public class ContractController extends BaseController implements IContractContr
     @Autowired
     ContractCmdService contractCmdService;
 
-    /**
-     * 浠栫殑鍚堝悓
-     *
-     * @param file              鏂囦欢
-     * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @return {@link Result<String>}
-     */
     @ApiOperation("鍒涘缓鍚堝悓")
     @Override
-    public Result<String> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
+    public Result<Long> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
         return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
     }
 }
-- 
GitLab


From 6e18e2bc9afb7525e0fb7fa042f7b1d431feb166 Mon Sep 17 00:00:00 2001
From: xiaqihang <xiaqihang@seaskysh.com>
Date: Thu, 23 Sep 2021 09:43:48 +0800
Subject: [PATCH 8/8] =?UTF-8?q?Revert=20"Revert=20"fix=EF=BC=9A=E7=BC=96?=
 =?UTF-8?q?=E5=86=99ocr=E8=AF=86=E5=88=AB=E6=8E=A5=E5=8F=A3=EF=BC=8Cdomain?=
 =?UTF-8?q?=E5=B1=82""?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit a54dd12e81a2a0b96aa48a953072d7f6e08ed231.
---
 .../seaskyocr/api/IContractController.java    |   4 +-
 .../command/contract/ContractCmdService.java  |   4 +-
 .../contract/ContractCmdServiceImpl.java      |  23 ++--
 .../aggregate/ocr/BaseOcrAggregate.java       |   8 +-
 .../aggregate/ocr/BaseOcrRepository.java      |  16 +++
 .../contract/ContractAggregate.java           |  37 ++++--
 .../contract/ContractRepository.java          |   1 -
 .../ocrimplement/contract/ContractVO.java     |   9 ++
 .../ocrFactory/Product/IHeHeProduct.java      |  14 +--
 .../ProductImpl/HeHeProductImpl.java          | 108 +++++++++++++++++-
 .../infrastructure/dataobject/co/OcrDo.java   |   4 +
 .../db/mapper/xml/OcrMapper.xml               |  30 ++++-
 .../repository/contract/ContractConvert.java  |  16 +++
 .../contract/ContractRepositoryImpl.java      |  17 ++-
 .../repository/ocr/OcrConvert.java            |  29 +++++
 .../repository/ocr/OcrRepositoryImpl.java     |  33 ++++++
 .../controller/ContractController.java        |   9 +-
 17 files changed, 323 insertions(+), 39 deletions(-)
 create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java

diff --git a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
index 92b8adeb..aea52749 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/seaskyocr/api/IContractController.java
@@ -20,8 +20,8 @@ public interface IContractController {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link Result<Long>}
+     * @return {@link Result<String>}
      */
     @PostMapping(path = "HeHeContract")
-    Result<Long> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
+    Result<String> HeHeContract(MultipartFile file ,CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
index 657d0b67..fab84bd3 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdService.java
@@ -14,7 +14,7 @@ public interface ContractCmdService {
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
      * @param file              鏂囦欢
-     * @return {@link Long}
+     * @return {@link String}
      */
-    Long createContract(MultipartFile file, CreateContractCmd createContractCmd);
+    String createContract(MultipartFile file, CreateContractCmd createContractCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
index ccf028ca..1f710d9a 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/contract/ContractCmdServiceImpl.java
@@ -4,6 +4,7 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
 import com.seasky.seaskyocr.domain.service.ocrFactory.IOcrFactory;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
 import com.seasky.seaskyocr.dto.contract.CreateContractCmd;
+import com.seasky.seaskyocr.enums.SupplierEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,20 +26,26 @@ public class ContractCmdServiceImpl implements ContractCmdService {
      * 鍒涘缓鍚堝悓
      *
      * @param createContractCmd 鍒涘缓鍚堝悓cmd
-     * @return {@link Long}
+     * @param file              鏂囦欢
+     * @return {@link String}
      */
     @Override
-    public Long createContract(MultipartFile file, CreateContractCmd createContractCmd) {
-        IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+    public String createContract(MultipartFile file, CreateContractCmd createContractCmd) {
         try {
             byte[] bytes = file.getBytes();
             String encode = new BASE64Encoder().encode(bytes);
             String hashId = String.valueOf(encode.hashCode());
-            //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
-            ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
-            if (contractAggregate != null){
-                //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥�
-                return null;
+            if (createContractCmd.getSupplierEnum().equals(SupplierEnum.鍚堝悎.val())){
+                IHeHeProduct heHeProduct = iOcrFactory.createHeHeProduct();
+                //鏌ヨ涓€涓嬫暟鎹簱涓槸鍚︽湁杩欎釜hashId
+                ContractAggregate contractAggregate = heHeProduct.queryByHashId(hashId);
+                if (contractAggregate != null){
+                    //鐩存帴灏嗘煡璇㈢粨鏋滆繑鍥� contractAggregate杞琌ut
+                    return null;
+                }
+                ContractAggregate aggregate = ContractAggregate.builder().build();
+                aggregate.create(createContractCmd.getAccountId(),file,createContractCmd.getAddField());
+                heHeProduct.getContract(aggregate);
             }
         } catch (IOException e) {
             e.printStackTrace();
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
index 639be2aa..36c7144b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrAggregate.java
@@ -2,8 +2,10 @@ package com.seasky.seaskyocr.domain.aggregate.ocr;
 
 import com.seasky.seaskyocr.enums.MethodEnum;
 import com.seasky.seaskyocr.enums.SupplierEnum;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.Map;
 
@@ -15,19 +17,21 @@ import java.util.Map;
  */
 @Data
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class BaseOcrAggregate {
     private Long id;
     private String name;
     private String appKey;
     private String secret;
     private String url;
-    private String contentType;
+//    private String contentType;
     private SupplierEnum supplierEnum;
     private MethodEnum methodEnum;
 
     private Map<String,String> body;
     private Map<String,String> head;
-    private Map<String,String> parameter;
+    private Map<String,Object> parameter;
 
     public void  updateAgg(BaseOcrVO vo){
         //todo 鎵€鏈夊睘鎬ц祴鍊�
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
index 1dd0dd6c..8b2e927b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocr/BaseOcrRepository.java
@@ -1,5 +1,7 @@
 package com.seasky.seaskyocr.domain.aggregate.ocr;
 
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
 /**
  * 鍩虹ocr搴�
  *
@@ -16,6 +18,20 @@ public interface BaseOcrRepository {
      */
     void save(BaseOcrAggregate baseOcrAggregate);
 
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    BaseOcrAggregate queryOcrDoById(Long id);
 
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    Long queryOcrIdByAccountId(Long id);
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
index ce70ec35..595c8f0b 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractAggregate.java
@@ -3,6 +3,9 @@ package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import lombok.Builder;
 import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 /**
  * 鍚堝悓鎬�
@@ -25,39 +28,51 @@ public class ContractAggregate extends BaseOcrImplementAggregate {
     private Long accountId;
 
     /**
-     * 鍚堝悓浠g爜
+     * 鍚堝悓鍚嶇О
      */
-    private String contractCode;
+    private String contractName;
 
     /**
-     * 鍚堝悓鍚嶇О
+     * 鍚堝悓缂栧彿
      */
-    private String contractName;
+    private String contractCode;
 
     /**
      * 鍐呭
      */
     private String content;
 
+    /**
+     * 鏂囦欢
+     */
+    private MultipartFile file;
+
+    /**
+     * 瑕佹煡璇㈢殑瀛楁
+     */
+    private List<String> addField;
+
     /**
      * 鍒涘缓鍚堝悓
      *
      * @param accountId 甯愭埛id
      */
-    public void create(Long accountId){
+    public void create(Long accountId, MultipartFile file, List<String> addField){
         this.accountId = accountId;
+        this.file = file;
+        this.addField = addField;
     }
 
     /**
      * 淇敼鍚堝悓
      *
-     * @param contractCode 鍚堝悓浠g爜
-     * @param contractName 鍚堝悓鍚嶇О
+     * @param contractVO 鍚堝悓绛捐瘉瀹�
      */
-    public void modify(String contractCode, String contractName, String hashId){
-        this.contractCode = contractCode;
-        this.contractName = contractName;
-        this.hashId = hashId;
+    public void modify(ContractVO contractVO){
+        this.contractName = contractVO.getContractName();
+        this.contractCode = contractVO.getContractCode();
+        this.hashId = contractVO.getHashId();
+        this.content = contractVO.getContent();
     }
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
index 22ad8ee7..6aaa8022 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractRepository.java
@@ -19,5 +19,4 @@ public interface ContractRepository extends DddRepository<ContractAggregate> {
      */
     ContractAggregate queryByHashId(String hashId);
 
-
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
index 1249f482..e2f0d7a7 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/ocrimplement/contract/ContractVO.java
@@ -1,11 +1,20 @@
 package com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
 /**
  * 鍚堝悓绛捐瘉瀹�
  *
  * @author bandi
  * @date 2021/09/17
  */
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class ContractVO {
 
     /**
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
index 1a2f976b..00c0212f 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/Product/IHeHeProduct.java
@@ -21,13 +21,13 @@ import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggre
     String getToken(BaseOcrImplementAggregate ocrImplementAggregate);
 
 
-    /**
-     * 鍏夊瀛楃璇嗗埆
-     *
-     * @param ocrImplementAggregate 鍚堝悎ocr鑱氬悎鏍�
-     * @return {@link String}
-     */
-    String getContract(BaseOcrImplementAggregate ocrImplementAggregate);
+   /**
+    * 寰楀埌鍚堝悓
+    *
+    * @param contractAggregate 鍚堝悓鎬�
+    * @return {@link String}
+    */
+   String getContract(ContractAggregate contractAggregate);
 
     /**
      * 鏌ヨ閫氳繃鏁e垪id
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
index 0786a9ca..df4fe760 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/service/ocrFactory/ProductImpl/HeHeProductImpl.java
@@ -1,11 +1,38 @@
 package com.seasky.seaskyocr.domain.service.ocrFactory.ProductImpl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataAccessException;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.BaseOcrImplementAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
+import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractVO;
 import com.seasky.seaskyocr.domain.service.ocrFactory.Product.IHeHeProduct;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.omg.IOP.Encoding;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import java.util.Map;
+import org.springframework.util.ObjectUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 鍚堝悎浜у搧impl
@@ -18,6 +45,8 @@ class HeHeProductImpl implements IHeHeProduct {
 
     @Autowired
     ContractRepository contractRepository;
+    @Autowired
+    BaseOcrRepository ocrRepository;
 
     @Override
     public String getToken(BaseOcrImplementAggregate ocrImplementAggregate) {
@@ -25,8 +54,49 @@ class HeHeProductImpl implements IHeHeProduct {
     }
 
     @Override
-    public String getContract(BaseOcrImplementAggregate ocrImplementAggregate) {
-        return null;
+    public String getContract(ContractAggregate contractAggregate) {
+        byte[] bytes = new byte[0];
+        try {
+            bytes = contractAggregate.getFile().getBytes();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        String encode = Base64.encodeBase64String(bytes);
+//        Long ocrId = ocrRepository.queryOcrIdByAccountId(contractAggregate.getAccountId());
+//        if (ocrId == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "涓嶅瓨鍦ㄤ笌璇ョ敤鎴风浉鍏宠仈鐨凮cr", ""));
+//        }
+//        BaseOcrAggregate baseOcrAggregate = ocrRepository.queryOcrDoById(ocrId);
+//        if (baseOcrAggregate == null){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鏌ヨ涓嶅埌鐩稿叧Ocr淇℃伅", ""));
+//        }
+//        Map<String, String> head = baseOcrAggregate.getHead();
+//        head.put("app-key","18de35986509e69f1a93f5907ecdac4f");
+//        head.put("app-secret","36b0d46acf9dd9e18665a40438d6ce77");
+//        Map<String, Object> parameter = new HashMap<>();
+//        //TODO 淇敼鍙傛暟key
+////        String configuredKeys = parameter.get("4").toString();
+////        contractAggregate.getAddField().add(configuredKeys);
+//        parameter.put("configuredKeys",contractAggregate.getAddField());
+//        parameter.put("filedata",encode);
+//        parameter.put("filename",contractAggregate.getFile().getOriginalFilename());
+//        String jsonString = JSON.toJSONString(parameter);
+//        String httpPost = sendPost(baseOcrAggregate.getUrl(), jsonString, head);
+//        if (ObjectUtils.isEmpty(httpPost)){
+//            throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "OCR鍥剧墖璇嗗埆澶辫触", ""));
+//        }
+//        String jsonUrl = JSONObject.parseObject(httpPost).getJSONObject("result").get("json_url").toString();
+        String jsonUrl = "https://doc-compare.intsig.com/doc_extraction/keyinfo/result?format=json&task_id=269e75f120b7ac27142456673978971a";
+        String result = sendPost(jsonUrl, null, null);
+        String content = JSONObject.parseObject(result).getJSONObject("result").get("customize_keys").toString();
+        System.out.println(JSONObject.parseObject(result).getJSONObject("result").get("stdandard_keys").toString());
+        String contractCode = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓缂栧彿").toString();
+        String contractName = JSONObject.parseObject(result).getJSONObject("result").getJSONObject("stdandard_keys").get("鍚堝悓鍚嶇О").toString();
+        String  hashId = String.valueOf(encode.hashCode());
+        ContractVO contractVO = ContractVO.builder().accountId(contractAggregate.getAccountId()).content(content).contractCode(contractCode).contractName(contractName).hashId(hashId).build();
+        contractAggregate.modify(contractVO);
+        contractRepository.save(contractAggregate);
+        return content;
     }
 
     /**
@@ -39,5 +109,37 @@ class HeHeProductImpl implements IHeHeProduct {
     public ContractAggregate queryByHashId(String hashId){
         return contractRepository.queryByHashId(hashId);
     }
-    
+
+    /**
+     * get http post
+     *
+     * @param url      url
+     * @param jsonData json鏁版嵁
+     * @return {@link String}
+     */
+    private String sendPost(String url, String jsonData, Map<String,String> header) {
+        String result ="";
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+        if (header != null){
+            header.forEach((key,value) -> httpPost.setHeader(key, value));
+        }
+        if (jsonData != null){
+            StringEntity entity = new StringEntity(jsonData, "UTF-8");
+            httpPost.setEntity(entity);
+        }
+        CloseableHttpResponse response = null;
+        try {
+            response = httpclient.execute(httpPost);
+            StatusLine status = response.getStatusLine();
+            if (status.getStatusCode() == HttpStatus.SC_OK) {
+                HttpEntity responseEntity = response.getEntity();
+                result = EntityUtils.toString(responseEntity);
+            }
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
index 7506b41b..b3c531b1 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/dataobject/co/OcrDo.java
@@ -31,6 +31,10 @@ public class OcrDo {
 
     private String url;
 
+    private String supplierEnum;
+
+    private String methodEnum;
+
     private List<OcrBodyPO> bodyPOList;
 
     private List<OcrHeaderPO> headerPOList;
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
index c812f319..306cb2ba 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/db/mapper/xml/OcrMapper.xml
@@ -8,6 +8,8 @@
         <result column="app_key" property="appKey"/>
         <result column="secret" property="secret"/>
         <result column="url" property="url"/>
+        <result column="supplierEnum" property="supplierEnum"/>
+        <result column="methodEnum" property="methodEnum"/>
         <collection property="bodyPOList" ofType="com.seasky.seaskyocr.infrastructure.dataobject.po.ocr.OcrBodyPO">
             <id column="bodyId" property="id"/>
             <result column="body_key" property="bodyKey"/>
@@ -36,6 +38,32 @@
     </select>
 
     <select id="queryOcrDoById" resultMap="OcrBodyHeaderParameter">
-
+        SELECT
+        o.id,
+        o.NAME,
+        o.app_key,
+        o.secret,
+        o.url,
+        o.supplierEnum,
+        o.methodEnum,
+        b.id AS bodyId,
+        b.body_key,
+        b.body_value,
+        h.id AS headId,
+        h.header_key,
+        h.header_value ,
+        p.id as parameterId,
+        p.parameter_key,
+        p.parameter_value
+        FROM
+        tb_ocr AS o
+        LEFT JOIN tb_ocr_body AS b ON o.id = b.ocr_id
+        LEFT JOIN tb_ocr_header AS h ON o.id = h.ocr_id
+        LEFT JOIN tb_ocr_parameter AS p ON o.id = p.ocr_id
+        <where>
+            <if test="id != null">
+                o.id = #{id}
+            </if>
+        </where>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
index 44463ee7..3a218d5d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractConvert.java
@@ -10,7 +10,23 @@ import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
  */
 public class ContractConvert {
 
+    /**
+     * 鍚堝悓璁㈠崟gg
+     *
+     * @param contractPO 鍚堝悓璁㈠崟
+     * @return {@link ContractAggregate}
+     */
     public static ContractAggregate contractPoToAgg(ContractPO contractPO){
         return MapperUtils.INSTANCE.map(ContractAggregate.class,contractPO);
     }
+
+    /**
+     * 鍚堝悓gg闃垮疂
+     *
+     * @param contractAggregate 鍚堝悓鎬�
+     * @return {@link ContractPO}
+     */
+    public static ContractPO contractAggToPo(ContractAggregate contractAggregate){
+        return MapperUtils.INSTANCE.map(ContractPO.class,contractAggregate);
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
index dae2fc57..893ca016 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/contract/ContractRepositoryImpl.java
@@ -1,7 +1,10 @@
 package com.seasky.seaskyocr.infrastructure.repository.contract;
 
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
 import com.seasky.core.ddd.base.BaseRepository;
 import com.seasky.core.ddd.base.DomainKeysMap;
+import com.seasky.core.exception.DataAccessException;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocrimplement.contract.ContractRepository;
 import com.seasky.seaskyocr.infrastructure.dataobject.po.contract.ContractPO;
@@ -21,7 +24,19 @@ public class ContractRepositoryImpl extends BaseRepository<ContractAggregate> im
 
     @Override
     protected Long baseSave(ContractAggregate aggregate) {
-        return null;
+        ContractPO contractPO = ContractConvert.contractAggToPo(aggregate);
+        if (contractPO.getId() == null){
+            contractPO.prepareBeforeInsert();
+            if (contractMapper.insert(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅鏂板澶辫触", ""));
+            }
+        }else{
+            contractPO.prepareBeforeUpdate();
+            if (contractMapper.updateById(contractPO) != 1){
+                throw new DataAccessException(new Error(ResponseCode.SERVER_INTERNAL_EXCEPTION, null, "鍚堝悓淇℃伅淇敼澶辫触", ""));
+            }
+        }
+        return 1L;
     }
 
     @Override
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
new file mode 100644
index 00000000..559c294c
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrConvert.java
@@ -0,0 +1,29 @@
+package com.seasky.seaskyocr.infrastructure.repository.ocr;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author xiaqihang
+ * @date 2021/9/22 9:04
+ */
+public class OcrConvert {
+
+    public static BaseOcrAggregate buildBaseOcrAgg(OcrDo ocrDo){
+        BaseOcrAggregate baseOcrAggregate = MapperUtils.INSTANCE.map(BaseOcrAggregate.class, ocrDo);
+        Map<String,String> body = new HashMap<>(6);
+        Map<String,String> head = new HashMap<>(6);
+        Map<String,Object> parameter = new HashMap<>(6);
+        ocrDo.getBodyPOList().forEach(i -> body.put(i.getBodyKey(),i.getBodyValue()));
+        ocrDo.getHeaderPOList().forEach(i -> head.put(i.getHeaderKey(),i.getHeaderValue()));
+        ocrDo.getParameterPOList().forEach(i -> parameter.put(i.getParameterKey(),i.getParameterValue()));
+        baseOcrAggregate.setBody(body);
+        baseOcrAggregate.setHead(head);
+        baseOcrAggregate.setParameter(parameter);
+        return baseOcrAggregate;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
index c5aac1f9..41168a8d 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/repository/ocr/OcrRepositoryImpl.java
@@ -2,6 +2,10 @@ package com.seasky.seaskyocr.infrastructure.repository.ocr;
 
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrAggregate;
 import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
+import com.seasky.seaskyocr.infrastructure.dataobject.co.OcrDo;
+import com.seasky.seaskyocr.infrastructure.db.mapper.table.OcrMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 /**
  * ocr搴搃mpl
@@ -9,10 +13,39 @@ import com.seasky.seaskyocr.domain.aggregate.ocr.BaseOcrRepository;
  * @author bandi
  * @date 2021/09/17
  */
+@Repository
 public class OcrRepositoryImpl implements BaseOcrRepository {
+
+    @Autowired
+    OcrMapper ocrMapper;
+
     @Override
     public void save(BaseOcrAggregate baseOcrAggregate) {
 
     }
 
+    /**
+     * 鏌ヨocr鐨刬d
+     *
+     * @param id id
+     * @return {@link OcrDo}
+     */
+    @Override
+    public BaseOcrAggregate queryOcrDoById(Long id) {
+        OcrDo ocrDo = ocrMapper.queryOcrDoById(id);
+        return OcrConvert.buildBaseOcrAgg(ocrDo);
+    }
+
+    /**
+     * 閫氳繃甯愭埛id鏌ヨocr id
+     *
+     * @param id id
+     * @return {@link Long}
+     */
+    @Override
+    public Long queryOcrIdByAccountId(Long id) {
+        return ocrMapper.queryOcrIdByAccountId(id);
+    }
+
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
index 0cc821ae..cdd04d62 100644
--- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
+++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ContractController.java
@@ -27,9 +27,16 @@ public class ContractController extends BaseController implements IContractContr
     @Autowired
     ContractCmdService contractCmdService;
 
+    /**
+     * 浠栫殑鍚堝悓
+     *
+     * @param file              鏂囦欢
+     * @param createContractCmd 鍒涘缓鍚堝悓cmd
+     * @return {@link Result<String>}
+     */
     @ApiOperation("鍒涘缓鍚堝悓")
     @Override
-    public Result<Long> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
+    public Result<String> HeHeContract(@RequestParam("file") MultipartFile file, CreateContractCmd createContractCmd) {
         return  ok(ResponseCode.SUCCESS, contractCmdService.createContract(file, createContractCmd));
     }
 }
-- 
GitLab