Browse Source

钉钉文件转译

Min 1 year ago
parent
commit
67f51fa26a

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/pom.xml

@@ -108,6 +108,11 @@
             <artifactId>dingtalk</artifactId>
             <version>1.1.50</version>
         </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>2.1.14</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DingDingService.java

@@ -52,4 +52,10 @@ public interface DingDingService {
     String inactiveUserNotInAuthRange(String corpid);
 
     HttpRespMsg fixAttendance(Integer companyId);
+
+    String getTranslationMediaId(String fileName,CompanyDingding dingding) throws Exception;
+
+    String syncTranslation(String mediaId,String fileName,String unionId,CompanyDingding dingding) throws Exception;
+
+    String getSyncTranslationResult(String jobId,CompanyDingding dingding) throws Exception;
 }

+ 93 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -3,8 +3,11 @@ package com.management.platform.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dingtalkcontact_1_0.Client;
 import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
+import com.aliyun.tea.TeaConverter;
 import com.aliyun.tea.TeaException;
+import com.aliyun.tea.TeaPair;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.models.RuntimeOptions;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -19,7 +22,9 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.*;
 import com.taobao.api.ApiException;
+import com.taobao.api.FileItem;
 import com.taobao.api.internal.util.StringUtils;
+import com.taobao.api.internal.util.WebUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -38,6 +43,13 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
+import com.aliyun.tea.*;
+import com.aliyun.teautil.*;
+import com.aliyun.teautil.models.*;
+import com.aliyun.dingtalkcontact_1_0.*;
+import com.aliyun.dingtalkcontact_1_0.models.*;
+import com.aliyun.teaopenapi.*;
+import com.aliyun.teaopenapi.models.*;
 
 //import com.management.platform.entity.vo.LeaveQuotaNum;
 
@@ -152,6 +164,9 @@ public class DingDingServiceImpl implements DingDingService {
     @Value("${configEnv.isDev}")
     private boolean isDev;//是否是本地开发环境
 
+    @Value("${upload.path}")
+    private String path;//是否是本地开发环境
+
     public static final HashMap<String, Long> syncLog = new HashMap();
 
     @Override
@@ -2529,6 +2544,84 @@ public class DingDingServiceImpl implements DingDingService {
         return SUITE_ACCESS_TOKEN;
     }
 
+    //上传文件获取media_id
+    @Override
+    public String getTranslationMediaId(String fileName,CompanyDingding dingding) throws Exception {
+        OapiFileUploadSingleRequest request = new OapiFileUploadSingleRequest();
+        request.setFileSize(45L);
+        request.setAgentId(String.valueOf(dingding.getAgentId()));
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/file/upload/single?"+ WebUtils.buildQuery(request.getTextParams(),"utf-8"));
+        // 必须重新new一个请求
+        String media_id;
+        request = new OapiFileUploadSingleRequest();
+        request.setFile(new FileItem(path+fileName));
+        OapiFileUploadSingleResponse response = client.execute(request,getCorpAccessToken(dingding));
+        System.out.println(response.getBody());
+        JSONObject obj = JSONObject.parseObject(response.getBody());
+        if (obj.getIntValue("errcode") == 0) {
+            media_id = obj.getString("media_id");
+            return media_id;
+        }
+        return null;
+    }
+
+
+    @Override
+    public String syncTranslation(String mediaId, String fileName, String unionId,CompanyDingding dingding) throws Exception {
+        com.aliyun.dingtalkcontact_1_0.Client client = createClient();
+        TranslateFileHeaders translateFileHeaders = new TranslateFileHeaders();
+        translateFileHeaders.xAcsDingtalkAccessToken =getCorpAccessToken(dingding);
+        if(mediaId!=null){
+            java.util.Map<String, String> medias = TeaConverter.buildMap(
+                    new TeaPair(mediaId,fileName)
+            );
+            TranslateFileRequest translateFileRequest = new TranslateFileRequest()
+                    .setMedias(medias)
+                    .setUnionId(unionId);
+            try {
+                TranslateFileResponse translateFileResponse = client.translateFileWithOptions(translateFileRequest, translateFileHeaders, new RuntimeOptions());
+                TranslateFileResponseBody body = translateFileResponse.body;
+                return body.jobId;
+            } catch (TeaException err) {
+                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+                }
+            } catch (Exception _err) {
+                TeaException err = new TeaException(_err.getMessage(), _err);
+                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+                }
+
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getSyncTranslationResult(String jobId,CompanyDingding dingding) throws Exception {
+        if(jobId!=null){
+            com.aliyun.dingtalkcontact_1_0.Client client = createClient();
+            GetTranslateFileJobResultHeaders getTranslateFileJobResultHeaders = new GetTranslateFileJobResultHeaders();
+            getTranslateFileJobResultHeaders.xAcsDingtalkAccessToken = getCorpAccessToken(dingding);
+            GetTranslateFileJobResultRequest getTranslateFileJobResultRequest = new GetTranslateFileJobResultRequest()
+                    .setJobId(jobId);
+            try {
+                GetTranslateFileJobResultResponse translateFileJobResultWithOptions = client.getTranslateFileJobResultWithOptions(getTranslateFileJobResultRequest, getTranslateFileJobResultHeaders, new RuntimeOptions());
+                GetTranslateFileJobResultResponseBody body = translateFileJobResultWithOptions.body;
+                return body.url;
+            } catch (TeaException err) {
+                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+                }
+            } catch (Exception _err) {
+                TeaException err = new TeaException(_err.getMessage(), _err);
+                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+                }
+            }
+        }
+        return null;
+    }
 
     private boolean judgeIsLeader(String userId) {
         int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExcelExportServiceImpl.java

@@ -13,6 +13,7 @@ import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.FillPatternType;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,6 +35,8 @@ public class ExcelExportServiceImpl implements ExcelExportService {
 
     @Resource
     private CorpwxJobResultMapper corpwxJobResultMapper;
+    @Value("${upload.path}")
+    private String path;
 
     @Transactional(isolation = Isolation.READ_COMMITTED)
     public void testRead(String jobId) {