From f246fcfe73a0402b55d3e92d1117bfb535dee09c Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Fri, 24 Jul 2020 15:21:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/FileUtils.java | 37 ++++++++ .../tools/utils/HttpClientManager.java | 52 ++++------- .../utils/InputStreamResponseHandler.java | 33 +++++++ .../tools/utils/Utf8ResponseHandler.java | 33 +++++++ .../main/java/com/epmet/dto/QrCodeDTO.java | 18 ++++ .../java/com/epmet/feign/OssFeignClient.java | 27 ++---- .../fallback/OssFeignClientFallback.java | 13 ++- .../com/epmet/controller/OssController.java | 15 ++- .../java/com/epmet/dto/CodeCustomerDTO.java | 5 + .../com/epmet/dto/form/CodeCommonFormDTO.java | 5 +- .../epmet/dto/form/SubmitAuditFormDTO.java | 2 +- .../com/epmet/controller/CodeController.java | 4 +- .../com/epmet/entity/CodeCustomerEntity.java | 6 ++ .../epmet/service/impl/CodeServiceImpl.java | 93 ++++++++++++++----- .../param/WxMaCodeSubmitAuditRequest.java | 2 +- .../epmet/wxapi/service/WxMaCodeService.java | 2 +- .../service/impl/WxMaCodeServiceImpl.java | 10 +- .../mapper/CodeOperationHistoryDao.xml | 2 +- 18 files changed, 270 insertions(+), 89 deletions(-) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java create mode 100644 epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java new file mode 100644 index 0000000000..a9623b7cde --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java @@ -0,0 +1,37 @@ +package com.epmet.commons.tools.utils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; + +public class FileUtils { + + /** + * 创建临时文件. + * + * @param inputStream 输入文件流 + * @param name 文件名 + * @param ext 扩展名 + * @param tmpDirFile 临时文件夹目录 + */ + public static File createTmpFile(InputStream inputStream, String name, String ext, File tmpDirFile) throws IOException { + File resultFile = File.createTempFile(name, '.' + ext, tmpDirFile); + + resultFile.deleteOnExit(); + org.apache.commons.io.FileUtils.copyToFile(inputStream, resultFile); + return resultFile; + } + + /** + * 创建临时文件. + * + * @param inputStream 输入文件流 + * @param name 文件名 + * @param ext 扩展名 + */ + public static File createTmpFile(InputStream inputStream, String name, String ext) throws IOException { + return createTmpFile(inputStream, name, ext, Files.createTempDirectory("weixin-java-tools-temp").toFile()); + } + +} 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 880dec240e..50ba1643c8 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 @@ -4,15 +4,12 @@ import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.dto.form.DingTalkTextMsg; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; -import com.epmet.commons.tools.scan.param.TextScanParamDTO; -import com.epmet.commons.tools.scan.param.TextTaskDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpEntity; -import org.apache.http.HttpStatus; -import org.apache.http.NameValuePair; +import org.apache.http.*; +import org.apache.http.client.HttpResponseException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; @@ -24,7 +21,6 @@ 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; -import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; @@ -33,17 +29,16 @@ import org.springframework.util.CollectionUtils; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; /** * desc: http 工具类 @@ -256,7 +251,7 @@ public class HttpClientManager { * * @author: jianjun liu */ - public Result sendGetFile(String url, Map params) { + public Result sendGetFile(String url, Map params) { try { URIBuilder builder = new URIBuilder(url); @@ -271,32 +266,35 @@ public class HttpClientManager { return executeToByte(httpGet); } catch (Exception e) { log.error("sendGet exception", e); - return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); } } - private Result executeToByte(HttpRequestBase httpMethod) { + private Result executeToByte(HttpRequestBase httpMethod) { CloseableHttpResponse response = 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 in = response.getEntity().getContent(); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - byte[] buffer = new byte[4096]; - int n = 0; - while (-1 != (n = in.read(buffer))) { - output.write(buffer, 0, n); - } - return new Result().ok(ArrayUtils.toObject(output.toByteArray())); + InputStream inputStream = InputStreamResponseHandler.INSTANCE.handleResponse(response); + Header[] contentTypeHeader = response.getHeaders("Content-Type"); + if (contentTypeHeader != null && contentTypeHeader.length > 0) { + // 出错 + if (ContentType.TEXT_PLAIN.getMimeType() + .equals(ContentType.parse(contentTypeHeader[0].getValue()).getMimeType())) { + String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); + } + } + File file = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), "jpg"); + return new Result().ok(file); } 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()); + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage()); } finally { httpMethod.releaseConnection(); try { @@ -306,21 +304,9 @@ public class HttpClientManager { } catch (IOException e) { } } - return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); + return new Result().error(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg()); } - public static void main(String[] args) { - String url = "http://localhost:8107/epmetscan/api/textSyncScan"; - TextTaskDTO p = new TextTaskDTO(); - p.setDataId("1"); - p.setContent("neirong1"); - List list = new ArrayList<>(); - list.add(p); - TextScanParamDTO param = new TextScanParamDTO(); - param.setTasks(list); - Result result = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(param)); - System.out.println(JSON.toJSONString(result)); - } } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java new file mode 100644 index 0000000000..75c16053fb --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/InputStreamResponseHandler.java @@ -0,0 +1,33 @@ +package com.epmet.commons.tools.utils; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpResponseException; +import org.apache.http.client.ResponseHandler; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.io.InputStream; + +/** + * 输入流响应处理器. + * + * @author Daniel Qian + */ +public class InputStreamResponseHandler implements ResponseHandler { + public static final ResponseHandler INSTANCE = new InputStreamResponseHandler(); + private static final int STATUS_CODE_300 = 300; + + @Override + public InputStream handleResponse(final HttpResponse response) throws IOException { + final StatusLine statusLine = response.getStatusLine(); + final HttpEntity entity = response.getEntity(); + if (statusLine.getStatusCode() >= STATUS_CODE_300) { + EntityUtils.consume(entity); + throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase()); + } + return entity == null ? null : entity.getContent(); + } + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java new file mode 100644 index 0000000000..107dc3cbdf --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Utf8ResponseHandler.java @@ -0,0 +1,33 @@ +package com.epmet.commons.tools.utils; + +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpResponseException; +import org.apache.http.client.ResponseHandler; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; + +/** + * copy from {@link org.apache.http.impl.client.BasicResponseHandler} + * + * @author Daniel Qian + */ +public class Utf8ResponseHandler implements ResponseHandler { + + public static final ResponseHandler INSTANCE = new Utf8ResponseHandler(); + + @Override + public String handleResponse(final HttpResponse response) throws IOException { + final StatusLine statusLine = response.getStatusLine(); + final HttpEntity entity = response.getEntity(); + if (statusLine.getStatusCode() >= 300) { + EntityUtils.consume(entity); + throw new HttpResponseException(statusLine.getStatusCode(), statusLine.toString()); + } + return entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8); + } + +} diff --git a/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java new file mode 100644 index 0000000000..a154d381a4 --- /dev/null +++ b/epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/QrCodeDTO.java @@ -0,0 +1,18 @@ +package com.epmet.dto; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.io.Serializable; + +/** + * @author zhaoqifeng + * @dscription + * @date 2020/7/24 10:10 + */ +@Data +public class QrCodeDTO implements Serializable { + private static final long serialVersionUID = -1787470699926486609L; + private byte[] qrCode; + private MultipartFile media; +} 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 a22f95bf71..0d200a7177 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 @@ -9,16 +9,13 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; -import feign.codec.Encoder; -import feign.form.spring.SpringFormEncoder; import com.epmet.commons.tools.utils.Result; -import com.epmet.dto.UploadDTO; +import com.epmet.dto.QrCodeDTO; +import com.epmet.dto.result.UploadImgResultDTO; +import com.epmet.feign.fallback.OssFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.context.annotation.Bean; 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 @@ -26,22 +23,18 @@ import org.springframework.web.multipart.MultipartFile; * @author Mark sunlightcs@gmail.c om * @since 1.1.0 */ -@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, configuration = OssFeignClient.MultipartSupportConfig.class) +@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, fallback = OssFeignClientFallback.class) public interface OssFeignClient { /** * 文件上传 - * @param file 文件 + * @param dto 文件 * @return 返回路径 */ - @PostMapping(value = "oss/file/upload", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, - consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - Result upload(@RequestPart("file") MultipartFile file); + @PostMapping(value = "oss/file/uploadwximg", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + Result uploadWxImg(QrCodeDTO dto); - class MultipartSupportConfig { - @Bean - public Encoder feignFormEncoder() { - return new SpringFormEncoder(); - } - } + + @PostMapping(value ="oss/file/uploadqrcode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + Result uploadQrCode(QrCodeDTO dto ); } 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 f1bb26a963..eb8f1b4b8b 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 @@ -8,8 +8,12 @@ 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; import org.springframework.web.multipart.MultipartFile; @@ -24,7 +28,12 @@ import org.springframework.web.multipart.MultipartFile; public class OssFeignClientFallback implements OssFeignClient { @Override - public Result upload(MultipartFile file) { - return new Result().error(); + public Result uploadWxImg(QrCodeDTO dto) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_OSS_SERVER, "uploadWxImg", dto); + } + + @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 4367e4e62e..e9f05c53cd 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,6 +18,7 @@ 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; @@ -98,7 +99,7 @@ public class OssController { @PostMapping("upload") @ApiOperation(value = "上传文件") - public Result upload(@RequestParam("file") MultipartFile file) throws Exception { + public Result upload(@RequestPart("file") MultipartFile file) throws Exception { if (file.isEmpty()) { return new Result().error(ModuleErrorCode.UPLOAD_FILE_EMPTY); } @@ -141,6 +142,18 @@ public class OssController { return ossService.uploadImg(file); } + @PostMapping("uploadwximg") + public Result uploadWxImg(QrCodeDTO dto) { + return ossService.uploadImg(dto.getMedia()); + } + + @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); + } /** * 上传客户logo(考虑到以后可能会针对不同的业务有不同的限制条件,这里不再使用通用的接口 * 针对每一个业务新建上传接口) diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java index 2a4c2227fc..458176f17d 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CodeCustomerDTO.java @@ -83,6 +83,11 @@ public class CodeCustomerDTO implements Serializable { */ private String status; + /** + * 二维码 + */ + private String qrCode; + /** * 乐观锁 */ diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java index e854b15992..2806aa1145 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CodeCommonFormDTO.java @@ -20,6 +20,7 @@ public class CodeCommonFormDTO implements Serializable { * 代码ID */ private String codeId; - private Integer page; - private Integer limit; + private String path; + private Integer page = 1; + private Integer limit = 999; } diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java index 82867159cf..222250510f 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SubmitAuditFormDTO.java @@ -39,7 +39,7 @@ public class SubmitAuditFormDTO implements Serializable { /** * 预览信息(小程序页面截图和操作录屏) */ - private List previewInfo; + private PreviewInfoBean previewInfo; /** * 用户生成内容场景(UGC)信息安全声明 */ diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java index e2b7901ed6..0c61ff9ac2 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CodeController.java @@ -161,9 +161,9 @@ public class CodeController { * @date 2020/7/16 10:16 */ @PostMapping("history") - public Result history(@RequestBody CodeCommonFormDTO formDTO) { + public Result> history(@RequestBody CodeCommonFormDTO formDTO) { PageData result = codeService.history(formDTO); - return new Result().ok(result); + return new Result>().ok(result.getList()); } /** diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java index 5bd2485033..3f84ef9a4a 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CodeCustomerEntity.java @@ -83,4 +83,10 @@ public class CodeCustomerEntity extends BaseEpmetEntity { */ private String status; + /** + * 二维码 + */ + private String qrCode; + + } 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 8e18dadcbf..aa2076ec75 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 @@ -6,17 +6,13 @@ import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; -import com.epmet.commons.tools.utils.MultipartFileToFileUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.CodeConstant; import com.epmet.dao.AuthorizationInfoDao; import com.epmet.dao.ComponentAccessTokenDao; import com.epmet.dto.*; import com.epmet.dto.form.*; -import com.epmet.dto.result.CodeHistoryResultDTO; -import com.epmet.dto.result.QrCodeResultDTO; -import com.epmet.dto.result.ReasonResultDTO; -import com.epmet.dto.result.TemplateListResultDTO; +import com.epmet.dto.result.*; import com.epmet.feign.OperCrmOpenFeignClient; import com.epmet.feign.OssFeignClient; import com.epmet.service.*; @@ -33,6 +29,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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; @@ -67,6 +66,10 @@ public class CodeServiceImpl implements CodeService { private CodeExtService codeExtService; @Autowired private OssFeignClient ossFeignClient; + @Autowired + private PaCustomerService paCustomerService; + @Autowired + private WxMaCodeService wxsMaCodeService; @Override public List templateList() { @@ -141,16 +144,13 @@ public class CodeServiceImpl implements CodeService { //获取客户信息 CustomerDTO customerDTO = new CustomerDTO(); customerDTO.setId(formDTO.getCustomerId()); - Result customerInfo = operCrmOpenFeignClient.getCustomerInfo(customerDTO); - if (!customerInfo.success()) { - throw new RenException(customerInfo.getCode(), customerInfo.getMsg()); - } + PaCustomerDTO paCustomerDTO = paCustomerService.get(formDTO.getCustomerId()); //将之前上传信息删除 codeCustomerService.deleteCode(formDTO.getCustomerId(), formDTO.getClientType()); //将上传信息存入表中 CodeCustomerDTO codeCustomerDTO = ConvertUtils.sourceToTarget(formDTO, CodeCustomerDTO.class); - codeCustomerDTO.setCustomerName(customerInfo.getData().getCustomerName()); + codeCustomerDTO.setCustomerName(paCustomerDTO.getCustomerName()); codeCustomerDTO.setExtJson(formDTO.getExtJson()); codeCustomerDTO.setAppId(authInfo.getAuthorizerAppid()); codeCustomerDTO.setStatus(CodeConstant.UNAUDITED); @@ -211,6 +211,7 @@ public class CodeServiceImpl implements CodeService { if (null == authInfo) { throw new RenException("未授权"); } + //调用微信API上提交审核 WxMaCodeSubmitAuditRequest request = new WxMaCodeSubmitAuditRequest(); request.setVersionDesc(formDTO.getVersionDesc()); @@ -225,13 +226,20 @@ public class CodeServiceImpl implements CodeService { wxResult.getErrorMsg()); throw new RenException(wxResult.getErrorCode(), wxResult.getErrorMsg()); } - //将数据存入代码审核表 - CodeAuditResultDTO codeAuditResultDTO = new CodeAuditResultDTO(); - codeAuditResultDTO.setCustomerId(codeCustomerDTO.getCustomerId()); - codeAuditResultDTO.setCodeId(codeCustomerDTO.getId()); - codeAuditResultDTO.setAuditId(wxResult.getData()); - codeAuditResultDTO.setResult(CodeConstant.AUDITING); - codeAuditResultService.save(codeAuditResultDTO); + //获取审核结果信息 + CodeAuditResultDTO codeAuditResultDTO = codeAuditResultService.getAuditResultByCodeId(formDTO.getCodeId()); + if (null == codeAuditResultDTO) { + //将数据存入代码审核表 + codeAuditResultDTO = new CodeAuditResultDTO(); + codeAuditResultDTO.setCustomerId(codeCustomerDTO.getCustomerId()); + codeAuditResultDTO.setCodeId(codeCustomerDTO.getId()); + codeAuditResultDTO.setAuditId(wxResult.getData()); + codeAuditResultDTO.setResult(CodeConstant.AUDITING); + codeAuditResultService.save(codeAuditResultDTO); + } else { + codeAuditResultDTO.setResult(CodeConstant.AUDITING); + codeAuditResultService.update(codeAuditResultDTO); + } //更新代码表状态 codeCustomerDTO.setStatus(CodeConstant.AUDITING); codeCustomerService.update(codeCustomerDTO); @@ -354,6 +362,10 @@ public class CodeServiceImpl implements CodeService { QrCodeResultDTO result = new QrCodeResultDTO(); //获取上传代码信息 CodeCustomerDTO codeCustomerDTO = codeCustomerService.get(formDTO.getCodeId()); + if (null != codeCustomerDTO.getQrCode()) { + result.setQrcode(codeCustomerDTO.getQrCode()); + return result; + } //是否授权 if (!customerMpService.getAuthFlag(codeCustomerDTO.getCustomerId(), codeCustomerDTO.getClientType())) { throw new RenException("未授权"); @@ -361,11 +373,20 @@ public class CodeServiceImpl implements CodeService { //获取小程序调用令牌 AuthorizationInfoDTO authInfo = authorizationInfoDao.getAuthInfoByCustomer(codeCustomerDTO.getCustomerId(), codeCustomerDTO.getClientType()); //调用微信API获取获取体验版二维码 - WxResult wxResult = wxMaCodeService.getQrCode(authInfo.getAuthorizerAccessToken(), null); + WxResult wxResult = wxMaCodeService.getQrCode(authInfo.getAuthorizerAccessToken(), formDTO.getPath()); + QrCodeDTO qrCodeDTO = new QrCodeDTO(); + try { + qrCodeDTO.setQrCode(Files.readAllBytes(wxResult.getData().toPath())); + Result uploadResult = ossFeignClient.uploadQrCode(qrCodeDTO); + codeCustomerDTO.setQrCode(uploadResult.getData().getUrl()); + codeCustomerService.update(codeCustomerDTO); + result.setQrcode(uploadResult.getData().getUrl()); + } catch (Exception e) { + throw new RenException(e.getMessage()); + } if (!wxResult.success()) { throw new RenException(wxResult.getErrorCode(), wxResult.getErrorMsg()); } - result.setQrcode(wxResult.getData()); return result; } @@ -382,8 +403,10 @@ public class CodeServiceImpl implements CodeService { @Override public String mediaUpload(MediaUploadFormDTO formDTO) { try { -// Result uploadDTOResult = ossFeignClient.upload(formDTO.getMedia()); - File file = MultipartFileToFileUtils.multipartFileToFile(formDTO.getMedia()); + QrCodeDTO dto = new QrCodeDTO(); + dto.setMedia(formDTO.getMedia()); + Result uploadDTOResult = ossFeignClient.uploadWxImg(dto); + File file = new File(uploadDTOResult.getData().getUrl()); //获取上传代码信息 CodeCustomerDTO codeCustomerDTO = codeCustomerService.get(formDTO.getCodeId()); //获取小程序调用令牌 @@ -433,5 +456,33 @@ public class CodeServiceImpl implements CodeService { } } + private byte[] toPrimitives(Byte[] oBytes) { + byte[] bytes = new byte[oBytes.length]; + + for (int i = 0; i < oBytes.length; i++) { + bytes[i] = oBytes[i]; + } + return bytes; + } + private void byteToFile(byte[] bytes) + { + try + { + // 根据绝对路径初始化文件 + File localFile = new File("."); + if (!localFile.exists()) + { + localFile.createNewFile(); + } + // 输出流 + OutputStream os = new FileOutputStream(localFile); + os.write(bytes); + os.close(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java index 1c63b9ed3a..38a074576f 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/param/WxMaCodeSubmitAuditRequest.java @@ -42,7 +42,7 @@ public class WxMaCodeSubmitAuditRequest implements Serializable { * 预览信息(小程序页面截图和操作录屏) */ @SerializedName("preview_info") - private List previewInfo; + private SubmitAuditFormDTO.PreviewInfoBean previewInfo; /** * 用户生成内容场景(UGC)信息安全声明 */ diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java index 111dff5f06..eea4649219 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxMaCodeService.java @@ -48,7 +48,7 @@ public interface WxMaCodeService { * @author zhaoqifeng * @date 2020/7/10 15:25 */ - WxResult getQrCode(String accessToken, String path); + WxResult getQrCode(String accessToken, String path); /** * 获取授权小程序帐号的可选类目. diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java index e0ae3823e5..5808634523 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxMaCodeServiceImpl.java @@ -10,10 +10,8 @@ import com.epmet.wxapi.result.*; import com.epmet.wxapi.service.WxMaCodeService; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; @@ -21,8 +19,6 @@ import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -74,8 +70,8 @@ public class WxMaCodeServiceImpl implements WxMaCodeService { } @Override - public WxResult getQrCode(String accessToken, String path) { - WxResult result = new WxResult<>(); + public WxResult getQrCode(String accessToken, String path) { + WxResult result = new WxResult<>(); StringBuilder url = new StringBuilder(WxMaCodeConstant.GET_QRCODE_URL).append("?access_token").append(accessToken); if (StringUtils.isNotBlank(path)) { try { @@ -84,7 +80,7 @@ public class WxMaCodeServiceImpl implements WxMaCodeService { e.printStackTrace(); } } - Result qrCodeResult = HttpClientManager.getInstance().sendGetFile(url.toString(), null); + Result qrCodeResult = HttpClientManager.getInstance().sendGetFile(url.toString(), null); if (!qrCodeResult.success()) { result.setErrorCode(qrCodeResult.getCode()); result.setErrorMsg(WxMaErrorMsgEnum.findMsgByCode(qrCodeResult.getCode())); diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml index 66041c4ea0..2e18d09f58 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CodeOperationHistoryDao.xml @@ -25,7 +25,7 @@