Pārlūkot izejas kodu

卡倍亿二期v1.0 ocr接口

wzy 9 mēneši atpakaļ
vecāks
revīzija
9f1826407e

+ 5 - 13
mjava-kabeiyi/pom.xml

@@ -40,19 +40,11 @@
             <artifactId>base</artifactId>
             <version>1.1-SNAPSHOT</version>
         </dependency>
-
-        <!--<dependency>-->
-            <!--<groupId>mysql</groupId>-->
-            <!--<artifactId>mysql-connector-java</artifactId>-->
-            <!--<version>8.0.32</version>-->
-            <!--<scope>runtime</scope>-->
-        <!--</dependency>-->
-
-        <!--<dependency>-->
-            <!--<groupId>com.baomidou</groupId>-->
-            <!--<artifactId>mybatis-plus-boot-starter</artifactId>-->
-            <!--<version>3.5.3.2</version>-->
-        <!--</dependency>-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibabacloud-ocr_api20210707</artifactId>
+            <version>3.0.2</version>
+        </dependency>
 
     </dependencies>
 

+ 9 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/controller/KabeiyiController.java

@@ -73,5 +73,14 @@ public class KabeiyiController {
         return kabeiyiService.pushProcInstToYD2(map);
     }
 
+    //发起问题整改审批
+    @PostMapping("addQuestionApproval")
+    public McR addQuestionApproval(@RequestBody Map map){
+        return kabeiyiService.addQuestionApproval(map);
+    }
 
+    @GetMapping("/ocr")
+    public McR ocr(){
+        return kabeiyiService.ocr();
+    }
 }

+ 9 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/KabeiyiService.java

@@ -27,4 +27,13 @@ public interface KabeiyiService {
      * @return
      */
     McR pushProcInstToYD2(Map map);
+
+    /**
+     * 发起问题整改审批
+     * @param map
+     * @return
+     */
+    McR addQuestionApproval(Map map);
+
+    McR ocr();
 }

+ 70 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/impl/KabeiyiServiceImpl.java

@@ -2,20 +2,26 @@ package com.malk.kabeiyi.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.malk.core.McProject;
 import com.malk.kabeiyi.service.KabeiyiService;
+import com.malk.kabeiyi.util.RecognizeAllText;
 import com.malk.kabeiyi.util.U8Util;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McR;
 import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Workflow;
+import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilHttp;
 import com.malk.utils.UtilToken;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.util.Strings;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -39,6 +45,9 @@ public class KabeiyiServiceImpl implements KabeiyiService {
     @Autowired
     private YDService ydService;
 
+    @Autowired
+    private YDClient ydClient;
+
     @Autowired
     private DDConf ddConf;
 
@@ -48,6 +57,12 @@ public class KabeiyiServiceImpl implements KabeiyiService {
     @Value("${tcdingtalk.appSecret}")
     private String appSecret;
 
+    @Value("${aliwork.accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${aliwork.accessKeySecret}")
+    private String accessKeySecret;
+
     //审批实例url前缀(卡倍亿)
     private static final String PROC_INST_PREFIX_URL = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=dingc3a744cb591a7346f2c783f7214b6d69#/plainapproval?procInstId=";
     //宜搭-关联数据(卡倍亿)
@@ -57,6 +72,10 @@ public class KabeiyiServiceImpl implements KabeiyiService {
     private static final String PROC_INST_PREFIX_URL2 = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=ding3ea249a3b5b466d0f2c783f7214b6d69#/plainapproval?procInstId=";
     //宜搭-关联数据(特充)
     private static final String RELATION2 = "FORM-51E17EFB52C14C9CB9E00168FED2BC18LQ6H";
+    //问题整改表
+    private static final String QUESTION = "FORM-89F515967FF94C62A9031F28EF6000B1YV5Q";
+    //问题整改表流程code
+    private static final String QUESTION_PROC_CODE = "TPROC--DP5660A1LEXNP1S37P7KU9GCHD5U3HB6C360M5";
 
     //关联表单(卡倍亿)
     private static final Map<String,String> SCHEMA_MAP = new HashMap<>();
@@ -284,6 +303,57 @@ public class KabeiyiServiceImpl implements KabeiyiService {
         return McR.errorParam("审批实例不存在!");
     }
 
+    @Override
+    public McR addQuestionApproval(Map map) {
+        MDC.put("MDC_KEY_PID","1009");
+
+        if (Objects.isNull(map.get("formInstId"))){
+            return McR.errorParam("formInstId不能为空!");
+        }
+        String formInstId = map.get("formInstId").toString();
+
+        DDR_New ddrNew = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id);
+        Map formData = ddrNew.getFormData();
+        List<String> reviewerUserIds = (List<String>) formData.get("employeeField_m061zye5_id");
+        List<String> rectificationUserIds = (List<String>) formData.get("employeeField_m061zyeq_id");
+        List<String> deptIds = (List<String>) formData.get("departmentSelectField_m0c3qbjn_id");
+        formData.put("departmentSelectField_m0c3qbjn",deptIds);
+        formData.put("employeeField_m061zye5",rectificationUserIds);
+        formData.put("employeeField_m061zyeq",reviewerUserIds);
+        //发起审批
+        String[] yida = McProject.getYida("1009");
+        Map<String,Object> body = new HashMap<>();
+
+        body.put("appType",yida[0]);
+        body.put("systemToken",yida[1]);
+        body.put("userId",reviewerUserIds.get(0));
+        body.put("formUuid",QUESTION);
+        body.put("processCode",QUESTION_PROC_CODE);
+        body.put("formDataJson", JSONObject.toJSONString(formData));
+
+        UtilHttp.doPost("https://api.dingtalk.com/v1.0/yida/processes/instances/start", ddClient.initTokenHeader(), null, body, DDR_New.class);
+        return McR.success();
+    }
+
+    @Override
+    public McR ocr() {
+        try {
+            String content = RecognizeAllText.recognizeText("C:\\Users\\EDY\\Desktop\\3.jpg","Table",accessKeyId,accessKeySecret);
+            return McR.success(content);
+        }catch (Exception e){
+            System.out.println(e.getMessage());
+        }
+
+        return McR.errorUnknown("识别失败!");
+    }
+
+
+    private String getString(Object obj){
+        return obj == null ? "" : obj.toString();
+    }
+
     public String getTcAccessToken() {
         String accessToken = UtilToken.get("tc-invalid-token-dingtalk");
         if (StringUtils.isNotBlank(accessToken)) {

+ 2 - 2
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/impl/McProjectServiceImpl.java

@@ -29,7 +29,7 @@ public class McProjectServiceImpl implements McProjectService {
         MDC.put("MDC_KEY_PID","1002");
         McProject.addYida("1002",new String[] {"APP_YNE2466O27IZFF9VVLQ1","T6666H71IOAMFEZR9I4O08U8TWJL2VAACWWXLJ4"});
         McProject.addYida("1003",new String[] {"APP_CRSI2VXGJE74J60OEFPD","C1A66XB1JOAMVXWCE3H28B05EU7T2F3AM4XXLN3"});
-
-        log.info("项目加载完毕:1002,1003");
+        McProject.addYida("1009",new String[] {"APP_S5U4NUUK2T4RF8UR17EN","JL666BD1QGXNTZQ5DXEI97Q1USK92I1G6160MTCF"});
+        log.info("项目加载完毕:1002,1003,1009");
     }
 }

+ 101 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/util/RecognizeAllText.java

@@ -0,0 +1,101 @@
+package com.malk.kabeiyi.util;
+
+import cn.hutool.json.JSONObject;
+import com.aliyun.auth.credentials.Credential;
+import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
+import com.aliyun.core.http.HttpClient;
+import com.aliyun.core.http.HttpMethod;
+import com.aliyun.core.http.ProxyOptions;
+import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
+import com.aliyun.sdk.service.ocr_api20210707.models.*;
+import com.aliyun.sdk.service.ocr_api20210707.*;
+import com.google.gson.Gson;
+import darabonba.core.RequestConfiguration;
+import darabonba.core.client.ClientOverrideConfiguration;
+import darabonba.core.utils.CommonUtil;
+import darabonba.core.TeaPair;
+import org.springframework.beans.factory.annotation.Value;
+
+//import javax.net.ssl.KeyManager;
+//import javax.net.ssl.X509TrustManager;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.time.Duration;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.io.*;
+import java.util.stream.Collectors;
+
+public class RecognizeAllText {
+    /*@Value("${aliyun.accessKeyId}")
+    private static String accessKeyId;
+
+    @Value("${aliyun.accessKeySecret}")
+    private static String accessKeySecret;*/
+
+    public static String recognizeText(String filePath,String type,String accessKeyId,String accessKeySecret) throws Exception {
+        if (!type.equals("Advanced") && !type.equals("Table")){
+            return null;
+        }
+        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
+                .accessKeyId(accessKeyId)
+                .accessKeySecret(accessKeySecret)
+//                .securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
+                .build());
+
+        // Configure the Client
+        AsyncClient client = AsyncClient.builder()
+                .region("cn-hangzhou") // Region ID
+                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
+                .credentialsProvider(provider)
+                //.serviceConfiguration(Configuration.create()) // Service-level configuration
+                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
+                .overrideConfiguration(
+                        ClientOverrideConfiguration.create()
+                                // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
+                                .setEndpointOverride("ocr-api.cn-hangzhou.aliyuncs.com")
+                        //.setConnectTimeout(Duration.ofSeconds(30))
+                )
+                .build();
+
+        // Parameter settings for API request
+        InputStream bodyStream = Files.newInputStream(new File(filePath).toPath());
+        RecognizeAllTextRequest recognizeAllTextRequest = RecognizeAllTextRequest.builder()
+                .type(type)
+                .body(bodyStream)
+                // Request-level configuration rewrite, can set Http request parameters, etc.
+                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
+                .build();
+
+        // Asynchronously get the return value of the API request
+        CompletableFuture<RecognizeAllTextResponse> response = client.recognizeAllText(recognizeAllTextRequest);
+        // Synchronously get the return value of the API request
+        RecognizeAllTextResponse resp = response.get();
+        String jsonString = new Gson().toJson(resp);
+        JSONObject jsonObject = new JSONObject(jsonString);
+
+        Map<String, Object> map = jsonObject.entrySet().stream()
+                .collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                        Map.Entry::getValue
+                ));
+        Map body = (Map) map.get("body");
+        Map data = (Map) body.get("data");
+        String content = String.valueOf(data.get("content"));
+
+        System.out.println(content);
+        // Asynchronous processing of return values
+        /*response.thenAccept(resp -> {
+            System.out.println(new Gson().toJson(resp));
+        }).exceptionally(throwable -> { // Handling exceptions
+            System.out.println(throwable.getMessage());
+            return null;
+        });*/
+
+        // Finally, close the client
+        client.close();
+        return content;
+    }
+
+}
+

+ 5 - 0
mjava-kabeiyi/src/main/resources/application-dev.yml

@@ -56,4 +56,9 @@ teambition:
 aliwork:
   appType: APP_HZ5V1PF2YGBIUCIYOSI5
   systemToken: DIC66I91HJ3MWKL3FAQ5UD46GIR129PR66KXLA
+  accessKeyId: LTAI5tCrLZLGgjfpBEvPK4er
+  accessKeySecret: lIoRZDrwFsJIV1sdGica8SyjViZFGV
 
+aliyun:
+  accessKeyId: LTAI5tCrLZLGgjfpBEvPK4er
+  accessKeySecret: lIoRZDrwFsJIV1sdGica8SyjViZFGV

+ 1 - 1
mjava-kabeiyi/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 100MB