From 7762bb5313874e38c4748f13638731f58b06c407 Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Thu, 25 Mar 2021 17:40:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=8F=91=E9=80=81=E5=88=B0?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0=20=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/utils/HttpClientManager.java | 92 +++++++- .../epmet/constant/ThirdPlatformActions.java | 17 +- .../com/epmet/dto/form/UploadFileFormDTO.java | 32 +++ .../epmet/dto/result/UploadFileResultDTO.java | 16 ++ .../feign/EpmetThirdOpenFeignClient.java | 22 +- .../EpmetThirdOpenFeignClientFallback.java | 20 +- .../java/com/epmet/apiservice/ApiService.java | 40 ++++ .../impl/LuzhouGridPlatformApiService.java | 33 +++ .../epmet/controller/ProjectController.java | 25 +- .../com/epmet/service/ProjectService.java | 16 +- .../service/impl/ProjectServiceImpl.java | 22 ++ .../com/epmet/dto/result/PlatformFileDTO.java | 24 ++ .../service/impl/ProjectServiceImpl.java | 214 ++++++++++++++++-- .../group/feign/ResiGroupOpenFeignClient.java | 9 + 14 files changed, 533 insertions(+), 49 deletions(-) create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/UploadFileFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/UploadFileResultDTO.java create mode 100644 epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/PlatformFileDTO.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java index 2481664829..55baf583a3 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/HttpClientManager.java @@ -6,6 +6,9 @@ import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; @@ -23,6 +26,7 @@ import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; @@ -32,16 +36,15 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.net.URLEncoder; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; @@ -239,6 +242,32 @@ public class HttpClientManager { } } + public Result uploadFile(String url, boolean isHttps, File file, String fileName, Map headerMap) { + try { + HttpPost httppost = new HttpPost(url); + httppost.setConfig(requestConfig); + if (null != headerMap) { + headerMap.forEach((k, v) -> { + if (v != null) { + httppost.addHeader(k, v.toString()); + } + }); + } + if (file != null) { + HttpEntity entity = MultipartEntityBuilder + .create() + .addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName) + .setMode(HttpMultipartMode.RFC6532) + .build(); + httppost.setEntity(entity); + } + return execute(httppost,isHttps); + } catch (Exception e) { + log.error("send exception", e); + throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + } + } + /** * desc: https发送json post 请求 * param: url,jsonStrParam @@ -436,6 +465,61 @@ public class HttpClientManager { } } + public Result getFileItem(String url, String fileName) { + + try { + URIBuilder builder = new URIBuilder(url); + + HttpGet httpGet = new HttpGet(builder.build()); + httpGet.setConfig(requestConfig); + return executeToFile(httpGet, fileName); + } catch (Exception e) { + log.error("sendGet exception", e); + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + } + } + + private Result executeToFile(HttpRequestBase httpMethod, String fileName) { + CloseableHttpResponse response = null; + FileItem item = null; + try { + response = httpclient.execute(httpMethod); + log.debug("http send response:{}", JSON.toJSONString(response)); + if (response != null && response.getStatusLine() != null) { + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + InputStream is = response.getEntity().getContent(); + FileItemFactory factory = new DiskFileItemFactory(16, null); + String textFieldName = "uploadfile"; + item = factory.createItem(textFieldName, ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); + OutputStream os = item.getOutputStream(); + + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = is.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + is.close(); + return new Result().ok(new CommonsMultipartFile(item)); + } else { + log.warn("execute http method fail,httpStatus:{0}", response.getStatusLine().getStatusCode()); + } + } + } catch (Exception e) { + log.error("execute exception", e); + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage()); + } finally { + httpMethod.releaseConnection(); + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + } + } + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + } + public Result getMediaByteArray(String url, String json) { try { diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java index 43390a2e14..dc17deca39 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/constant/ThirdPlatformActions.java @@ -2,12 +2,21 @@ package com.epmet.constant; /** * 第三方平台动作常量 + * @author kamui */ public interface ThirdPlatformActions { - // 获取accessToken - String GET_ACCESS_TOKEN = "GET_ACCESS_TOKEN"; - // 项目协助 - String PROJECT_ASSIST = "PROJECT_ASSIST"; + /** + * 获取accessToken + */ + String GET_ACCESS_TOKEN = "GET_ACCESS_TOKEN"; + /** + * 项目协助 + */ + String PROJECT_ASSIST = "PROJECT_ASSIST"; + /** + * 上传文件 + */ + String UPLOAD_FILE = "UPLOAD_FILE"; } diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/UploadFileFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/UploadFileFormDTO.java new file mode 100644 index 0000000000..d5c060a4e5 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/UploadFileFormDTO.java @@ -0,0 +1,32 @@ +package com.epmet.dto.form; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/3/25 9:57 + */ +@Data +public class UploadFileFormDTO implements Serializable { + private static final long serialVersionUID = 2911010733366812636L; + /** + * 客户ID + */ + private String customerId; + + /** + * 平台ID + */ + @NotBlank(message = "平台ID不能为空") + private String platformId; + + /** + * 文件 + */ + private MultipartFile file; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/UploadFileResultDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/UploadFileResultDTO.java new file mode 100644 index 0000000000..e3916e8a07 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/UploadFileResultDTO.java @@ -0,0 +1,16 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/3/25 10:09 + */ +@Data +public class UploadFileResultDTO implements Serializable { + private static final long serialVersionUID = -4986665750488963082L; + private String url; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java index 9497f1bed8..932f7ecc2f 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java @@ -3,18 +3,13 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.ProjectDTO; -import com.epmet.dto.form.ProcessListFormDTO; -import com.epmet.dto.form.ProjectApplyAssistFormDTO; -import com.epmet.dto.form.ProjectByCreateTopicUserFormDTO; -import com.epmet.dto.form.ProjectListFromDTO; +import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.feign.fallback.EpmetThirdOpenFeignClientFallback; import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -38,4 +33,15 @@ public interface EpmetThirdOpenFeignClient { @PostMapping("third/project/apply-assist") Result applyAssist(@RequestBody ProjectApplyAssistFormDTO formDTO); + /** + * 上传文件 + * @author zhaoqifeng + * @date 2021/3/25 16:10 + * @param file + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("third/project/uploadfile") + Result uploadFile(@RequestParam("file") MultipartFile file, UploadFileFormDTO formDTO); + } diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java index 05c0d52fd7..bbcd8a73ad 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java @@ -4,14 +4,12 @@ import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.ProjectDTO; -import com.epmet.dto.form.ProcessListFormDTO; -import com.epmet.dto.form.ProjectApplyAssistFormDTO; -import com.epmet.dto.form.ProjectByCreateTopicUserFormDTO; -import com.epmet.dto.form.ProjectListFromDTO; +import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.feign.EpmetThirdOpenFeignClient; import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO; import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -35,4 +33,18 @@ public class EpmetThirdOpenFeignClientFallback implements EpmetThirdOpenFeignCli public Result applyAssist(ProjectApplyAssistFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "applyAssist", formDTO); } + + /** + * 上传文件 + * + * @param file + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author zhaoqifeng + * @date 2021/3/25 16:10 + */ + @Override + public Result uploadFile(MultipartFile file, UploadFileFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "uploadFile", formDTO); + } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java index 89bb8f8e24..5542c67eb9 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/ApiService.java @@ -2,6 +2,7 @@ package com.epmet.apiservice; import com.alibaba.fastjson.JSON; import com.epmet.apiservice.result.LZGridPlatformBaseResult; +import com.epmet.dto.form.UploadFileFormDTO; import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.dto.result.ProjectAssistResult; import com.epmet.commons.tools.exception.RenException; @@ -13,11 +14,13 @@ import com.epmet.dao.ThirdplatformCustomerRegisterDao; import com.epmet.dao.ThirdplatformDao; import com.epmet.dto.form.ProjectApplyAssistFormDTO; import com.epmet.dto.form.TPFDemoFormDTO; +import com.epmet.dto.result.UploadFileResultDTO; import com.epmet.entity.ThirdplatformActionEntity; import com.epmet.entity.ThirdplatformCustomerRegisterEntity; import com.epmet.entity.ThirdplatformEntity; import org.springframework.data.redis.core.RedisTemplate; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -117,6 +120,37 @@ public abstract class ApiService { throw new RenException("请求第三方平台,发送Post请求失败。错误信息:" + result.getMsg()); } + LZGridPlatformBaseResult platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class); + judgeResultSuccess(platformResult); + return result.getData(); + } + + public String sendPostRequestToUploadFile(String platformId, String action, File file, String fileName) { + // 1.获取token + String accessToken = getAccessToken(platformId); + //2.获取url + ThirdplatformEntity thirdplatform = SpringContextUtils.getBean(ThirdplatformDao.class).selectById(platformId); + ThirdplatformActionEntity actionEntity = SpringContextUtils.getBean(ThirdplatformActionDao.class) + .getByPlatformIdAndActionKey(platformId, action); + + Map headers = new HashMap<>(); + + // 填充access token到头当中 + headers.put("X-Access-Token", accessToken); + + Result result = HttpClientManager.getInstance().uploadFile(thirdplatform.getBaseUrl().concat(actionEntity.getApiUrl()), + thirdplatform.getBaseUrl().startsWith("https://"), + file, + fileName, + headers); + + if (result == null) { + throw new RenException("请求第三方平台,发送Post请求失败。result为null"); + } + if (!result.success()) { + throw new RenException("请求第三方平台,发送Post请求失败。错误信息:" + result.getMsg()); + } + LZGridPlatformBaseResult platformResult = JSON.parseObject(result.getData(), LZGridPlatformBaseResult.class); // token过期重试逻辑,先不加 @@ -210,4 +244,10 @@ public abstract class ApiService { * @date 2021.03.22 10:32 */ public abstract void judgeResultSuccess(LZGridPlatformBaseResult result); + + public UploadFileResultDTO uploadFile(UploadFileFormDTO formDTO) { + return null; + } + + } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java index de5522b547..e893469ec1 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/apiservice/impl/LuzhouGridPlatformApiService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.epmet.apiservice.ApiService; import com.epmet.apiservice.result.LZGridPlatformBaseResult; import com.epmet.apiservice.result.LZGridPlatformProjectAssistResult; +import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.utils.HttpClientManager; @@ -12,15 +13,21 @@ import com.epmet.commons.tools.utils.SpringContextUtils; import com.epmet.constant.ThirdPlatformActions; import com.epmet.dao.ThirdplatformActionDao; import com.epmet.dao.ThirdplatformDao; +import com.epmet.dto.form.UploadFileFormDTO; import com.epmet.dto.result.ProjectAssistResult; import com.epmet.dto.form.ProjectApplyAssistFormDTO; +import com.epmet.dto.result.UploadFileResultDTO; import com.epmet.entity.ThirdplatformActionEntity; import com.epmet.entity.ThirdplatformEntity; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.io.File; import java.util.HashMap; +import java.util.Objects; /** * 泸州网格化平台ApiService @@ -95,4 +102,30 @@ public class LuzhouGridPlatformApiService extends ApiService { throw new RenException("泸州网格化平台:返回失败结果,错误码:" + result.getCode()); } } + + @Override + public UploadFileResultDTO uploadFile(UploadFileFormDTO formDTO) { + UploadFileResultDTO resultDTO = new UploadFileResultDTO(); + String platformId = formDTO.getPlatformId(); + try { + String fileName = formDTO.getFile().getOriginalFilename(); + // 正式调用第三方平台 + File file = new File(formDTO.getFile().getOriginalFilename()); + FileUtils.copyInputStreamToFile(formDTO.getFile().getInputStream(), file); + String result = sendPostRequestToUploadFile(platformId, ThirdPlatformActions.UPLOAD_FILE, file, fileName); + if (!StringUtils.isBlank(result)) { + // 此处要经过一系列业务处理,将第三方平台返回的数据进行解析,等处理最后转换成ProjectAssistResult类型,返回。ProjectAssistResult这个类型是 + // 所有apiService的projectAssist方法返回值的统一类型,是我们的epmet-cloud所需要的数据的实体, + // 所有apiService都要想办法转化成这个类型。 + LZGridPlatformBaseResult lzResult = JSON.parseObject(result, LZGridPlatformBaseResult.class); + + // 此处设置为第三方系统返回的唯一id + resultDTO.setUrl((String) lzResult.getResult()); + } + System.out.println("泸州网格化平台项目文件上传成功"); + } catch (Exception e) { + throw new RenException("上传失败"); + } + return resultDTO; + } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ProjectController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ProjectController.java index 699f70ec34..d645bac2b6 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ProjectController.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ProjectController.java @@ -1,16 +1,16 @@ package com.epmet.controller; +import com.epmet.dto.form.UploadFileFormDTO; import com.epmet.dto.result.ProjectAssistResult; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.ProjectApplyAssistFormDTO; import com.epmet.dto.form.TPFDemoFormDTO; +import com.epmet.dto.result.UploadFileResultDTO; import com.epmet.service.ProjectService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; /** * 对接第三方平台业务Project相关的controller @@ -50,4 +50,21 @@ public class ProjectController { return new Result().ok(projectAssistResult); } + /** + * 上传文件 + * @author zhaoqifeng + * @date 2021/3/25 11:13 + * @param file + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("uploadfile") + public Result uploadFile(@RequestParam("file") MultipartFile file, UploadFileFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO); + formDTO.setFile(file); + UploadFileResultDTO result = projectService.uploadFile(formDTO); + return new Result().ok(result); + } + + } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ProjectService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ProjectService.java index 2b6e8601a5..ce6c0cd3a2 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ProjectService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ProjectService.java @@ -1,8 +1,10 @@ package com.epmet.service; +import com.epmet.dto.form.UploadFileFormDTO; import com.epmet.dto.result.ProjectAssistResult; import com.epmet.dto.form.ProjectApplyAssistFormDTO; import com.epmet.dto.form.TPFDemoFormDTO; +import com.epmet.dto.result.UploadFileResultDTO; /** * 该service用于封装project相关的代码 @@ -12,8 +14,20 @@ public interface ProjectService { String demoAction(TPFDemoFormDTO formDTO); /** - * + * 项目协同处理 + * @author wangxz + * @date 2021/3/25 10:59 * @param formDTO + * @return com.epmet.dto.result.ProjectAssistResult */ ProjectAssistResult applyAssist(ProjectApplyAssistFormDTO formDTO); + + /** + * 文件上传 + * @author zhaoqifeng + * @date 2021/3/25 10:59 + * @param formDTO + * @return com.epmet.dto.result.UploadFileResultDTO + */ + UploadFileResultDTO uploadFile(UploadFileFormDTO formDTO); } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java index b9f539a7a7..dddf8a9909 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java @@ -1,9 +1,11 @@ package com.epmet.service.impl; import com.epmet.apiservice.ApiService; +import com.epmet.dto.form.UploadFileFormDTO; import com.epmet.dto.result.ProjectAssistResult; import com.epmet.dto.form.ProjectApplyAssistFormDTO; import com.epmet.dto.form.TPFDemoFormDTO; +import com.epmet.dto.result.UploadFileResultDTO; import com.epmet.service.ApiServiceSelector; import com.epmet.service.ProjectService; import org.springframework.stereotype.Service; @@ -35,4 +37,24 @@ public class ProjectServiceImpl implements ProjectService, ApiServiceSelector { return apiService.projectAssist(formDTO); } + + /** + * 文件上传 + * + * @param formDTO + * @return com.epmet.dto.result.UploadFileResultDTO + * @author zhaoqifeng + * @date 2021/3/25 10:59 + */ + @Override + public UploadFileResultDTO uploadFile(UploadFileFormDTO formDTO) { + String customerId = formDTO.getCustomerId(); + String platformId = formDTO.getPlatformId(); + + // 根据平台ID找到注意,此处会如果找不到对应的ApiService会抛出异常 + ApiService apiService = selectApiService(platformId); + // 判断该客户是否注册了该平台,如果没有的话,抛出异常 + apiService.judgeRegistered(customerId, platformId); + return apiService.uploadFile(formDTO); + } } diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/PlatformFileDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/PlatformFileDTO.java new file mode 100644 index 0000000000..841b1ea207 --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/PlatformFileDTO.java @@ -0,0 +1,24 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2021/3/25 16:47 + */ +@Data +public class PlatformFileDTO implements Serializable { + private static final long serialVersionUID = 1090878172073142780L; + String projectImages; + String projectVoices; + String projectVideos; + String projectDocs; + String topicImages; + String topicVoices; + String topicVideos; + String topicDocs; +} diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java index 73c293d828..4042b79217 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java @@ -28,10 +28,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.scan.param.TextScanParamDTO; import com.epmet.commons.tools.scan.param.TextTaskDTO; import com.epmet.commons.tools.scan.result.SyncScanResult; -import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.utils.DateUtils; -import com.epmet.commons.tools.utils.Result; -import com.epmet.commons.tools.utils.ScanContentUtils; +import com.epmet.commons.tools.utils.*; import com.epmet.constant.ParameterKeyConstant; import com.epmet.constant.ProjectConstant; import com.epmet.constant.SmsTemplateConstant; @@ -46,6 +43,9 @@ import com.epmet.feign.*; import com.epmet.redis.ProjectRedis; import com.epmet.resi.group.constant.TopicConstant; import com.epmet.resi.group.dto.topic.ResiTopicDTO; +import com.epmet.resi.group.dto.topic.form.TopicAttachmentFormDTO; +import com.epmet.resi.group.dto.topic.result.TopicAttachmentResultDTO; +import com.epmet.resi.group.dto.topic.result.TopicFileResultDTO; import com.epmet.resi.group.feign.ResiGroupOpenFeignClient; import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO; import com.epmet.service.*; @@ -63,6 +63,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import java.text.SimpleDateFormat; @@ -2074,22 +2075,93 @@ public class ProjectServiceImpl extends BaseServiceImpl imageList = - formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.IMAGE.equals(fileDTO.getType())).map(FileDTO::getUrl).collect(Collectors.toList()); + //附件上传到第三方平台,获取返回的链接 + List imageList = + formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.IMAGE.equals(fileDTO.getType())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(imageList)) { - applyAssistFormDTO.setImageLink(String.join(StrConstant.COMMA, imageList)); + List images = new ArrayList<>(); + for (FileDTO file : imageList) { + Result multipartFileResult = HttpClientManager.getInstance().getFileItem(file.getUrl(), file.getName()); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + images.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(images)) { + String all = String.join(StrConstant.COMMA, images); + applyAssistFormDTO.setImageLink(all); + platformFileDTO.setProjectImages(all); + } } - List voiceList = - formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.VOICE.equals(fileDTO.getType())).map(FileDTO::getUrl).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(imageList)) { - applyAssistFormDTO.setVoiceLink(String.join(StrConstant.COMMA, voiceList)); + List voiceList = + formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.VOICE.equals(fileDTO.getType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(voiceList)) { + List voices = new ArrayList<>(); + for (FileDTO file : voiceList) { + Result multipartFileResult = HttpClientManager.getInstance().getFileItem(file.getUrl(), file.getName()); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + voices.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(voices)) { + String all = String.join(StrConstant.COMMA, voices); + applyAssistFormDTO.setVoiceLink(all); + platformFileDTO.setProjectVoices(all); + } } - List videoList = - formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.VIDEO.equals(fileDTO.getType())).map(FileDTO::getUrl).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(imageList)) { - applyAssistFormDTO.setVideoLink(String.join(StrConstant.COMMA, videoList)); + List videoList = + formDTO.getInternalFile().stream().filter(fileDTO -> TopicConstant.VIDEO.equals(fileDTO.getType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(videoList)) { + List videos = new ArrayList<>(); + for (FileDTO file : videoList) { + Result multipartFileResult = HttpClientManager.getInstance().getFileItem(file.getUrl(), file.getName()); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + videos.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(videos)) { + String all = String.join(StrConstant.COMMA, videos); + applyAssistFormDTO.setVideoLink(all); + platformFileDTO.setProjectVideos(all); + } + } + if (CollectionUtils.isNotEmpty(formDTO.getInternalFile())) { + List docs = new ArrayList<>(); + for (FileDTO file : formDTO.getInternalFile()) { + Result multipartFileResult = HttpClientManager.getInstance().getFileItem(file.getUrl(), file.getName()); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + docs.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(docs)) { + String all = String.join(StrConstant.COMMA, docs); + platformFileDTO.setProjectDocs(all); + } } } //获取工作人员信息 @@ -2110,6 +2182,7 @@ public class ProjectServiceImpl extends BaseServiceImpl topic = resiGroupOpenFeignClient.getTopicById(issueDetail.getData().getTopicInfo().getTopicId()); if (!topic.success()) { throw new RenException(topic.getCode(), topic.getMsg()); @@ -2119,6 +2192,89 @@ public class ProjectServiceImpl extends BaseServiceImpl topicAttachment = resiGroupOpenFeignClient.topicAttachmentList(topicAttachmentFormDTO); + if (!topicAttachment.success()) { + throw new RenException(topicAttachment.getCode(), topicAttachment.getMsg()); + } + if (CollectionUtils.isNotEmpty(issueDetail.getData().getTopicInfo().getPhotoList())) { + List files = new ArrayList<>(); + for (String url : issueDetail.getData().getTopicInfo().getPhotoList()) { + Result multipartFileResult = + HttpClientManager.getInstance().getFileItem(url, UUID.randomUUID().toString().replace("-", "")); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + files.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(files)) { + String all = String.join(StrConstant.COMMA, files); + platformFileDTO.setTopicImages(all); + } + } + if (CollectionUtils.isNotEmpty(topicAttachment.getData().getVoiceList())) { + List files = new ArrayList<>(); + for (TopicFileResultDTO item : topicAttachment.getData().getVoiceList()) { + Result multipartFileResult = + HttpClientManager.getInstance().getFileItem(item.getUrl(), UUID.randomUUID().toString().replace("-", "")); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + files.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(files)) { + String all = String.join(StrConstant.COMMA, files); + platformFileDTO.setTopicVoices(all); + } + } + if (CollectionUtils.isNotEmpty(topicAttachment.getData().getVideoList())) { + List files = new ArrayList<>(); + for (TopicFileResultDTO item : topicAttachment.getData().getVideoList()) { + Result multipartFileResult = + HttpClientManager.getInstance().getFileItem(item.getUrl(), UUID.randomUUID().toString().replace("-", "")); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + files.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(files)) { + String all = String.join(StrConstant.COMMA, files); + platformFileDTO.setTopicVideos(all); + } + } + if (CollectionUtils.isNotEmpty(topicAttachment.getData().getDocList())) { + List files = new ArrayList<>(); + for (TopicFileResultDTO item : topicAttachment.getData().getDocList()) { + Result multipartFileResult = + HttpClientManager.getInstance().getFileItem(item.getUrl(), UUID.randomUUID().toString().replace("-", "")); + if (!multipartFileResult.success()) { + throw new RenException(multipartFileResult.getCode(), multipartFileResult.getMsg()); + } + Result uploadResult = epmetThirdOpenFeignClient.uploadFile(multipartFileResult.getData(), uploadFileFormDTO); + if (!uploadResult.success()) { + throw new RenException(uploadResult.getCode(), uploadResult.getMsg()); + } + files.add(uploadResult.getData().getUrl()); + } + if (CollectionUtils.isNotEmpty(files)) { + String all = String.join(StrConstant.COMMA, files); + platformFileDTO.setTopicDocs(all); + } + } ProjectDetailDTO projectDetailDTO = ConvertUtils.sourceToTarget(issueDetail.getData(), ProjectDetailDTO.class); projectDetailDTO.setTopicContent(issueDetail.getData().getTopicInfo().getTopicContent()); projectDetailDTO.setTopicPublisher(issueDetail.getData().getTopicInfo().getTopicPublisher()); @@ -2139,7 +2295,7 @@ public class ProjectServiceImpl extends BaseServiceImpl processList = projectTraceService.processListV2(processListV2FormDTO); - applyAssistFormDTO.setDetail(getDetail(projectDetailDTO, projectDetailResultDTO, processList)); + applyAssistFormDTO.setDetail(getDetail(projectDetailDTO, projectDetailResultDTO, processList, platformFileDTO)); applyAssistFormDTO.setDetailAddress(projectDetailDTO.getBelongsGridName()); applyAssistFormDTO.setSource("党建引领"); applyAssistFormDTO.setNotifyUrl("/gov/project/project/platformcallback"); @@ -2235,7 +2391,7 @@ public class ProjectServiceImpl extends BaseServiceImpl processList) { + private String getDetail(ProjectDetailDTO sourceDTO, ProjectDetailResultDTO projectDetail, List processList, PlatformFileDTO platformFileDTO) { String detail = ""; detail = detail.concat("项目来源\n"); if (null == sourceDTO.getTopicContent()) { @@ -2246,16 +2402,27 @@ public class ProjectServiceImpl extends BaseServiceImpl()); } String source = "议题标题:" + sourceDTO.getIssueTitle() + "\n" + - "针对话题\n" + (null == sourceDTO.getTopicContent()?"":sourceDTO.getTopicContent()) + "\n" + - "话题图片\n" + Joiner.on(StrConstant.COMMA).join(sourceDTO.getPhotoList()) + "\n" + - "建议采用如下处理方式\n" + sourceDTO.getIssueSuggestion() + "\n" + + "针对话题\n" + (null == sourceDTO.getTopicContent()?"":sourceDTO.getTopicContent()) + "\n"; + if (StringUtils.isNotEmpty(platformFileDTO.getTopicImages())) { + source = source + "话题图片:" + platformFileDTO.getTopicImages() + "\n"; + } + if (StringUtils.isNotEmpty(platformFileDTO.getTopicVoices())) { + source = source + "话题语音:" + platformFileDTO.getTopicVoices() + "\n"; + } + if (StringUtils.isNotEmpty(platformFileDTO.getTopicVideos())) { + source = source + "话题视频:" + platformFileDTO.getTopicVideos() + "\n"; + } + if (StringUtils.isNotEmpty(platformFileDTO.getTopicDocs())) { + source = source + "话题文档:" + platformFileDTO.getTopicDocs() + "\n"; + } + source = source + "建议采用如下处理方式\n" + sourceDTO.getIssueSuggestion() + "\n" + "所属网格:" + sourceDTO.getBelongsGridName() + "\n" + "话题发表人:" + sourceDTO.getTopicPublisher() + sourceDTO.getTopicPublisherMobile() + "\n" + "议题发表人:" + sourceDTO.getIssueInitiator() + sourceDTO.getIssuePublisherMobile() + "\n" + "话题发表时间:" + DateUtils.formatTimestamp(sourceDTO.getTopicPublishTime(), DateUtils.DATE_TIME_PATTERN); detail = detail.concat(source); detail = detail.concat("\n项目详情\n"); - detail = "项目标题:" +projectDetail.getProjectTitle() + "\n" + + detail = detail + "项目标题:" +projectDetail.getProjectTitle() + "\n" + "项目方案::\n" + projectDetail.getPublicReply() + "\n" + "内部备注:\n" + projectDetail.getInternalRemark() + "\n" + "当前处理部门:\n"; @@ -2267,12 +2434,11 @@ public class ProjectServiceImpl extends BaseServiceImpl getTopicById(@PathVariable("topicId") String topicId); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 获取话题附件信息 + **/ + @PostMapping(value = "/resi/group/topic/topicattachmentlist") + Result topicAttachmentList(@RequestBody TopicAttachmentFormDTO formDTO); }