From d6cd3e1fabf5cf836dba2fcf285969f1e30a41a4 Mon Sep 17 00:00:00 2001 From: Jackwang Date: Fri, 5 Aug 2022 15:45:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E7=A4=BE=E5=8C=BA=E7=A0=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/controller/AgencyController.java | 85 ++++++++++++------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java index 489eb10876..333b3eb9d2 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java @@ -17,17 +17,19 @@ package com.epmet.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.epmet.commons.rocketmq.messages.OrgOrStaffMQMsg; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.RequirePermission; import com.epmet.commons.tools.constant.StrConstant; -import com.epmet.commons.tools.enums.EnvEnum; +import com.epmet.commons.tools.enums.CollectUrlEnum; import com.epmet.commons.tools.enums.RequirePermissionEnum; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.security.dto.TokenDto; -import com.epmet.commons.tools.utils.BarcodeUtils; +import com.epmet.commons.tools.utils.HttpClientManager; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constant.CustomerAgencyConstant; @@ -37,10 +39,13 @@ import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.CustomerAgencyEntity; import com.epmet.feign.EpmetMessageOpenFeignClient; +import com.epmet.feign.OssFeignClient; +import com.epmet.resi.group.dto.QRCodeMultipartFileDTO; import com.epmet.send.SendMqMsgUtil; import com.epmet.service.AgencyService; import com.epmet.service.CustomerAgencyService; import com.epmet.service.IcNeighborHoodService; +import com.epmet.utils.ThirdUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -55,9 +60,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.net.URL; import java.net.URLEncoder; -import java.time.LocalDateTime; -import java.time.ZoneOffset; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -81,6 +86,8 @@ public class AgencyController { private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient; @Autowired private IcNeighborHoodService neighborHoodService; + @Autowired + private OssFeignClient ossFeignClient; /** * @param formDTO @@ -399,41 +406,60 @@ public class AgencyController { public void createQrCode(@LoginUser TokenDto tokenDto, @RequestBody CreateQrCodeFormDTO formDTO, HttpServletResponse response) { ValidatorUtils.validateEntity(formDTO, CreateQrCodeFormDTO.CreateQrCodeForm.class); String id = formDTO.getId(); - String type = formDTO.getType(); String name = ""; + if(!formDTO.getType().equals(OrgInfoConstant.COMMUNITY)){ + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "只可生成社区码"); + } try { - if (type.equals(OrgInfoConstant.COMMUNITY)) { - CustomerAgencyDTO customerAgencyDTO = customerAgencyService.get(id); - if (customerAgencyDTO == null) { - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "组织信息不存在"); + //获取AccessToken + String accessToken = ThirdUtils.getAccessToken(tokenDto.getCustomerId()).getResiToken(); + if (org.apache.commons.lang3.StringUtils.isBlank(accessToken)) { + log.warn("获取accessToken失败,customerId:{}", tokenDto.getCustomerId()); + throw new RenException("获取accessToken失败,customerId:{}", tokenDto.getCustomerId()); + } + CustomerAgencyDTO customerAgencyDTO = customerAgencyService.get(id); + if (customerAgencyDTO == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "组织信息不存在"); + } + name = customerAgencyDTO.getOrganizationName(); + //url组成:信息采集地址?社区id + StringBuilder path = new StringBuilder(CollectUrlEnum.URL_PRE.getCode()); + path.append("?agencyId=").append(formDTO.getId()); + //需要发送的Json + JSONObject data = new JSONObject(); + data.put("path", path.toString()); + data.put("width", 400); + //发送 + byte[] buffer = HttpClientManager.getInstance().getMediaByteArray(CollectUrlEnum.GET_CODE_URL.getCode() + accessToken, JSON.toJSONString(data)).getData(); + if (buffer != null && buffer.length < 500) { + String wxResult = ""; + wxResult = new String(buffer, StandardCharsets.UTF_8); + if (-1 != wxResult.indexOf("errcode")) { + log.error("获取二维码接口返回错误:{}", wxResult); + throw new RenException("获取二维码失败"); } - name = customerAgencyDTO.getOrganizationName(); - } else { - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "小区信息不存在"); } - //url组成:数字社区地址?小区id&用户id - //String url = "https://demo.tduckapp.com/s/7314b64b3a26455ab793fb8c640856b6?id="+id; - String url = EnvEnum.getCurrentEnv().getUrl() - .replace("cloud", "open") - .replace("api/", StrConstant.EPMETY_STR) - .concat("epmet-oper-gov/#/caiji/") - .concat(id).concat("?") - .concat("name=").concat(URLEncoder.encode(name, StrConstant.UTF_8)).concat(StrConstant.AND_MARK) - .concat("customerId=").concat(tokenDto.getCustomerId()).concat(StrConstant.AND_MARK) - .concat("type=").concat(type).concat(StrConstant.AND_MARK) - .concat("userId=").concat(tokenDto.getUserId()) - .concat(StrConstant.AND_MARK).concat(String.valueOf(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli())); - BufferedImage image = BarcodeUtils.drawQRImage(name, url); - //BufferedImage 转 InputStream + //上传 + QRCodeMultipartFileDTO qrCodeMultipartFile = new QRCodeMultipartFileDTO(); + qrCodeMultipartFile.setBytes(buffer); + String originalFilename = name.concat(".jpg"); + qrCodeMultipartFile.setOriginalFilename(originalFilename); + Result uploadResult = ossFeignClient.uploadQrCode(qrCodeMultipartFile); + if (!uploadResult.success()) { + throw new RenException("调用oss服务上传活动居民信息录入码失败"); + } + + URL url = new URL(uploadResult.getData().getUrl()); + BufferedImage img = ImageIO.read(url); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ImageOutputStream imageOutput = ImageIO.createImageOutputStream(byteArrayOutputStream); - ImageIO.write(image, "png", imageOutput); + ImageIO.write(img, "png", imageOutput); InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); long length = imageOutput.length(); - String fileName = name + ".png"; response.setContentType("application/octet-stream"); response.setContentLength((int) length); - response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, StrConstant.UTF_8)); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(originalFilename, StrConstant.UTF_8)); //输出流 byte[] bytes = new byte[1024]; @@ -445,6 +471,7 @@ public class AgencyController { outputStream.write(bytes, 0, len); } outputStream.flush(); + } catch (Exception e) { log.error("method exception", e); }