From 9e17b707e969432224dd2d60812c525c526312c6 Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Mon, 27 Jul 2020 16:00:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BD=93=E9=AA=8C=E7=89=88?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/feign/OssFeignClient.java | 25 +++++++-- .../fallback/OssFeignClientFallback.java | 23 ++++---- .../com/epmet/controller/OssController.java | 12 ++-- .../epmet-third/epmet-third-server/pom.xml | 6 ++ .../epmet/service/impl/CodeServiceImpl.java | 42 ++++++++------ .../java/com/epmet/wxapi/param/WxExtJson.java | 56 ++++++++++++++++++- 6 files changed, 120 insertions(+), 44 deletions(-) diff --git a/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java index 0d200a7177..47daa888cc 100644 --- a/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java +++ b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java @@ -10,12 +10,17 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; -import com.epmet.dto.QrCodeDTO; import com.epmet.dto.result.UploadImgResultDTO; import com.epmet.feign.fallback.OssFeignClientFallback; +import feign.codec.Encoder; +import feign.form.spring.SpringFormEncoder; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; /** * OSS @@ -23,18 +28,28 @@ import org.springframework.web.bind.annotation.PostMapping; * @author Mark sunlightcs@gmail.c om * @since 1.1.0 */ -@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, fallback = OssFeignClientFallback.class) +@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, configuration = OssFeignClient.MultipartSupportConfig.class, fallback = + OssFeignClientFallback.class) public interface OssFeignClient { /** * 文件上传 - * @param dto 文件 + * @param media 文件 * @return 返回路径 */ @PostMapping(value = "oss/file/uploadwximg", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - Result uploadWxImg(QrCodeDTO dto); + Result uploadWxImg(@RequestPart(value = "media") MultipartFile media); @PostMapping(value ="oss/file/uploadqrcode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - Result uploadQrCode(QrCodeDTO dto ); + Result uploadQrCode(@RequestPart(value = "file") MultipartFile file); + + + @Configuration + class MultipartSupportConfig { + @Bean + public Encoder feignFormEncoder() { + return new SpringFormEncoder(); + } + } } diff --git a/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java index eb8f1b4b8b..0158f7f017 100644 --- a/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java +++ b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/fallback/OssFeignClientFallback.java @@ -1,8 +1,8 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ @@ -11,8 +11,6 @@ package com.epmet.feign.fallback; 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.QrCodeDTO; -import com.epmet.dto.UploadDTO; import com.epmet.dto.result.UploadImgResultDTO; import com.epmet.feign.OssFeignClient; import org.springframework.stereotype.Component; @@ -27,13 +25,14 @@ import org.springframework.web.multipart.MultipartFile; @Component public class OssFeignClientFallback implements OssFeignClient { - @Override - public Result uploadWxImg(QrCodeDTO dto) { - return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadWxImg", dto); - } + @Override + public Result uploadWxImg(MultipartFile media) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadWxImg", media); + } + + @Override + public Result uploadQrCode(MultipartFile file) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadQrCode", file); + } - @Override - public Result uploadQrCode(QrCodeDTO dto) { - return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadQrCode", dto); - } } diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java index e9f05c53cd..5b3e3bee6b 100644 --- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java +++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java @@ -18,7 +18,6 @@ import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AliyunGroup; import com.epmet.commons.tools.validator.group.QcloudGroup; import com.epmet.commons.tools.validator.group.QiniuGroup; -import com.epmet.dto.QrCodeDTO; import com.epmet.dto.UploadDTO; import com.epmet.dto.result.UploadImgResultDTO; import com.epmet.entity.OssEntity; @@ -143,16 +142,13 @@ public class OssController { } @PostMapping("uploadwximg") - public Result uploadWxImg(QrCodeDTO dto) { - return ossService.uploadImg(dto.getMedia()); + public Result uploadWxImg(@RequestPart("media") MultipartFile media) { + return ossService.uploadImg(media); } @PostMapping("uploadqrcode") - public Result uploadQrCode(QrCodeDTO dto) { - String url = OssFactory.build().uploadSuffix(dto.getQrCode(), "jpg"); - UploadImgResultDTO result = new UploadImgResultDTO(); - result.setUrl(url); - return new Result().ok(result); + public Result uploadQrCode(@RequestPart(value = "file") MultipartFile file) { + return ossService.uploadImg(file); } /** * 上传客户logo(考虑到以后可能会针对不同的业务有不同的限制条件,这里不再使用通用的接口 diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml index 283c78d2d9..df429c2210 100644 --- a/epmet-module/epmet-third/epmet-third-server/pom.xml +++ b/epmet-module/epmet-third/epmet-third-server/pom.xml @@ -141,6 +141,12 @@ 2.0.0 compile + + org.springframework + spring-test + 5.1.12.RELEASE + compile + diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java index 18221f298e..fbaaef13fc 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CodeServiceImpl.java @@ -1,5 +1,6 @@ package com.epmet.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.RenException; @@ -16,22 +17,20 @@ import com.epmet.dto.result.*; import com.epmet.feign.OperCrmOpenFeignClient; import com.epmet.feign.OssFeignClient; import com.epmet.service.*; -import com.epmet.wxapi.param.WxMaCodeAuditStatusReq; -import com.epmet.wxapi.param.WxMaCodeCommitReq; -import com.epmet.wxapi.param.WxMaCodeSubmitAuditRequest; -import com.epmet.wxapi.param.WxMaNewsReq; +import com.epmet.wxapi.param.*; import com.epmet.wxapi.result.*; import com.epmet.wxapi.service.WxMaCodeService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; -import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -68,8 +67,6 @@ public class CodeServiceImpl implements CodeService { private OssFeignClient ossFeignClient; @Autowired private PaCustomerService paCustomerService; - @Autowired - private WxMaCodeService wxsMaCodeService; @Override public List templateList() { @@ -104,6 +101,15 @@ public class CodeServiceImpl implements CodeService { return codeExtDTO.getExtJson(); } + public static void main(String[] args) { + String json = "{\"extEnable\":true,\"extAppid\":\"wx2679392c4cc2af22\",\"directCommit\":false,\"ext\":{\"extAppid\":\"wx2679392c4cc2af22\",\"footbar\":{\"work\":{\"name\":\"工作\",\"pageTile\":\"工作\"},\"org\":{\"name\":\"组织\",\"pageTile\":\"组织\"},\"data\":{\"name\":\"数据\",\"pageTile\":\"数据\"},\"find\":{\"name\":\"更多\",\"pageTile\":\"更多\"}}}}"; + WxExtJson wxExtJson = JSONObject.parseObject(json, WxExtJson.class); + wxExtJson.setExtAppid("123456"); + wxExtJson.getExt().setExtAppid("123456"); + String extJson = JSON.toJSONString(wxExtJson); + System.out.println(extJson); + } + @Override @Transactional(rollbackFor = Exception.class) public void upload(CodeUploadFormDTO formDTO) { @@ -120,20 +126,24 @@ public class CodeServiceImpl implements CodeService { throw new RenException("第三方配置不是有效的Json"); } + WxExtJson wxExtJson = JSONObject.parseObject(formDTO.getExtJson(), WxExtJson.class); + wxExtJson.setExtAppid(authInfo.getAuthorizerAppid()); + wxExtJson.getExt().setExtAppid(authInfo.getAuthorizerAppid()); + String extJson = JSON.toJSONString(wxExtJson); CodeExtDTO codeExtDTO = codeExtService.getExtByCustomer(formDTO.getCustomerId(), formDTO.getClientType()); if (null == codeExtDTO) { codeExtDTO = new CodeExtDTO(); codeExtDTO.setCustomerId(formDTO.getCustomerId()); codeExtDTO.setClientType(formDTO.getClientType()); codeExtDTO.setAppId(authInfo.getAuthorizerAppid()); - codeExtDTO.setExtJson(formDTO.getExtJson()); + codeExtDTO.setExtJson(extJson); codeExtService.save(codeExtDTO); } - codeExtDTO.setExtJson(formDTO.getExtJson()); + codeExtDTO.setExtJson(extJson); codeExtService.update(codeExtDTO); WxMaCodeCommitReq request = ConvertUtils.sourceToTarget(formDTO, WxMaCodeCommitReq.class); - request.setExtJson(formDTO.getExtJson()); + request.setExtJson(extJson); //调用微信API上传代码 WxResult wxResult = wxMaCodeService.commit(authInfo.getAuthorizerAccessToken(), request); //上传失败,抛出异常 @@ -151,7 +161,7 @@ public class CodeServiceImpl implements CodeService { //将上传信息存入表中 CodeCustomerDTO codeCustomerDTO = ConvertUtils.sourceToTarget(formDTO, CodeCustomerDTO.class); codeCustomerDTO.setCustomerName(paCustomerDTO.getCustomerName()); - codeCustomerDTO.setExtJson(formDTO.getExtJson()); + codeCustomerDTO.setExtJson(extJson); codeCustomerDTO.setAppId(authInfo.getAuthorizerAppid()); codeCustomerDTO.setStatus(CodeConstant.UNAUDITED); codeCustomerService.save(codeCustomerDTO); @@ -374,9 +384,9 @@ public class CodeServiceImpl implements CodeService { AuthorizationInfoDTO authInfo = authorizationInfoDao.getAuthInfoByCustomer(codeCustomerDTO.getCustomerId(), codeCustomerDTO.getClientType()); //调用微信API获取获取体验版二维码 WxResult wxResult = wxMaCodeService.getQrCode(authInfo.getAuthorizerAccessToken(), formDTO.getPath()); - QrCodeDTO qrCodeDTO = new QrCodeDTO(); - qrCodeDTO.setQrCode(wxResult.getData()); - Result uploadResult = ossFeignClient.uploadQrCode(qrCodeDTO); + MultipartFile file = null; + file = new MockMultipartFile("file", "QRCode.jpg", "image/jpeg", wxResult.getData()); + Result uploadResult = ossFeignClient.uploadQrCode(file); codeCustomerDTO.setQrCode(uploadResult.getData().getUrl()); codeCustomerService.update(codeCustomerDTO); result.setQrcode(uploadResult.getData().getUrl()); @@ -399,9 +409,7 @@ public class CodeServiceImpl implements CodeService { @Override public String mediaUpload(MediaUploadFormDTO formDTO) { try { - QrCodeDTO dto = new QrCodeDTO(); - dto.setMedia(formDTO.getMedia()); - Result uploadWxImg = ossFeignClient.uploadWxImg(dto); + Result uploadWxImg = ossFeignClient.uploadWxImg(formDTO.getMedia()); File file = new File(uploadWxImg.getData().getUrl()); //获取上传代码信息 CodeCustomerDTO codeCustomerDTO = codeCustomerService.get(formDTO.getCodeId()); diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxExtJson.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxExtJson.java index 13441e4573..8d6b843126 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxExtJson.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxExtJson.java @@ -1,5 +1,6 @@ package com.epmet.wxapi.param; +import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,50 +16,101 @@ import java.io.Serializable; public class WxExtJson implements Serializable { private static final long serialVersionUID = -559311391779774945L; - + @JSONField(ordinal = 1) private boolean extEnable; + @JSONField(ordinal = 2) private String extAppid; + @JSONField(ordinal = 3) private boolean directCommit; + @JSONField(ordinal = 4) private ExtBean ext; @NoArgsConstructor @Data - private static class ExtBean { + public static class ExtBean { + @JSONField(ordinal = 1) private String extAppid; + @JSONField(ordinal = 2) private FootbarBean footbar; @NoArgsConstructor @Data private static class FootbarBean { + @JSONField(ordinal = 1) private WorkBean work; + @JSONField(ordinal = 2) private OrgBean org; + @JSONField(ordinal = 3) private DataBean data; + @JSONField(ordinal = 4) private FindBean find; + @JSONField(ordinal = 5) + private GardenBean garden; + @JSONField(ordinal = 6) + private IssueBean issue; + @JSONField(ordinal = 7) + private GroupBean group; @NoArgsConstructor @Data private static class WorkBean { + @JSONField(ordinal = 1) private String name; + @JSONField(ordinal = 2) private String pageTile; } @NoArgsConstructor @Data private static class OrgBean { + @JSONField(ordinal = 1) private String name; + @JSONField(ordinal = 2) private String pageTile; } @NoArgsConstructor @Data private static class DataBean { + @JSONField(ordinal = 1) private String name; + @JSONField(ordinal = 2) private String pageTile; } @NoArgsConstructor @Data private static class FindBean { + @JSONField(ordinal = 1) + private String name; + @JSONField(ordinal = 2) + private String pageTile; + } + + @NoArgsConstructor + @Data + private static class GardenBean { + @JSONField(ordinal = 1) + private String name; + @JSONField(ordinal = 2) + private String pageTile; + + } + + @NoArgsConstructor + @Data + private static class IssueBean { + @JSONField(ordinal = 1) + private String name; + @JSONField(ordinal = 2) + private String pageTile; + } + + @NoArgsConstructor + @Data + private static class GroupBean { + @JSONField(ordinal = 1) private String name; + @JSONField(ordinal = 2) private String pageTile; } }