diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ApprovalRegionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ApprovalRegionDO.java new file mode 100644 index 000000000..e13b82881 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ApprovalRegionDO.java @@ -0,0 +1,24 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ApprovalRegionDO { + + @ApiModelProperty("id") + private Integer id; + + @ApiModelProperty("业务对象ID") + private String instanceId; + + @ApiModelProperty("地区编码") + private String code; + + @ApiModelProperty("地区名") + private String regionName; + + @ApiModelProperty("地区父级编号") + private String parentCode; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/MDMUploadFileReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/MDMUploadFileReq.java new file mode 100644 index 000000000..9797eb59a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/MDMUploadFileReq.java @@ -0,0 +1,12 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel +public class MDMUploadFileReq { + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java index 95130c4f6..6c6384eb4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java @@ -4,12 +4,13 @@ import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; +import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.PutObjectRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.io.InputStream; +import java.io.*; @Component @Slf4j @@ -65,4 +66,51 @@ public class OSSServer { } return null; } + + /** + * 服务端下载文件到内存流 + * @param objectName 自定义路径 + 文件名 + */ + public ByteArrayOutputStream downloadFileServer(String objectName) throws IOException { + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 + OSSObject ossObject = ossClient.getObject(bucket, "partner/" + corpId + "/" + objectName); + + // 读取文件内容转为 ByteArrayInputStream + InputStream objectInputstream = ossObject.getObjectContent(); + byte[] buffer = new byte[1024]; + int len; + while ((len = objectInputstream.read(buffer)) != -1 ) { + outputStream.write(buffer, 0, len); + } + outputStream.flush(); + byte[] byteArray = outputStream.toByteArray(); + + // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。 + ossObject.close(); + + } catch (OSSException oe) { + log.error("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + log.error("Error Message:" + oe.getErrorMessage()); + log.error("Error Code:" + oe.getErrorCode()); + log.error("Request ID:" + oe.getRequestId()); + log.error("Host ID:" + oe.getHostId()); + } catch (Throwable ce) { + log.error("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + log.error("Error Message:" + ce.getMessage()); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + outputStream.close(); + } + return outputStream; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java index 60a6010ee..76ea04e11 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java @@ -4,13 +4,15 @@ import com.cool.store.exception.ApiException; import com.cool.store.request.CreateQualifyVerifyReq; import com.cool.store.request.QualificationCallbackReq; +import java.io.IOException; + /** * @Author: young.yu * @Date: 2023-06-14 13:51 * @Description: */ public interface FlowService { - void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException; + void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException, IOException; void qualificationCallback(QualificationCallbackReq request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java index 99d36d86d..6cd828a13 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.SerializerFeature; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyInterviewDAO; import com.cool.store.dto.mdm.AccessTokenDTO; @@ -24,6 +25,7 @@ import com.cool.store.request.QualificationCallbackReq; import com.cool.store.request.RpcCreateQualifyVerifyReq; import com.cool.store.request.RpcGetMdmTokenReq; import com.cool.store.request.data.flow.KeyText; +import com.cool.store.request.data.flow.SkrRelshipProve; import com.cool.store.service.FlowService; import com.cool.store.utils.PDFUtils; import com.cool.store.utils.PassLetterUtils; @@ -33,12 +35,17 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.*; /** @@ -85,10 +92,10 @@ public class FlowServiceImpl implements FlowService { @Override @Transactional - public void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException { + public void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException, IOException { //1.发起加盟商资质审核 RpcCreateQualifyVerifyReq rpcRequest = new RpcCreateQualifyVerifyReq(); - RpcCreateQualifyVerifyReq.Data dataBody = rpcRequest.getData(); + RpcCreateQualifyVerifyReq.Data dataBody = new RpcCreateQualifyVerifyReq().new Data(); KeyText fraSource = new KeyText(); fraSource.setKey("HSAYPartner"); fraSource.setText("沪上阿姨合伙人"); @@ -135,6 +142,12 @@ public class FlowServiceImpl implements FlowService { } //通过 rpc 请求审核系统获取返回数据 + //上传证明文件数据 + if (StringUtils.isNotEmpty(request.getSignerRealControlRelationCert())) { + List certFileList = Arrays.asList(request.getSignerRealControlRelationCert().split(",")); + List relshipProves = OSSFileToMDMFile(certFileList); + rpcRequest.getData().setSkrRelshipProve(relshipProves); + } Map qualifyVerifyRespData = JSON.parseObject(createQualifyVerify(rpcRequest), new TypeReference>() {}); //2.更新审核信息 @@ -230,6 +243,50 @@ public class FlowServiceImpl implements FlowService { } } + public List OSSFileToMDMFile(List fileUrlList) throws ApiException, IOException { + String url = mdmBaseUrl + "/api/openapi/ext/upload/file"; + ResponseEntity responseEntity = null; + RpcGetMdmTokenReq rpcGetMDMTokenReq = new RpcGetMdmTokenReq(); + rpcGetMDMTokenReq.setAppKey(mdmAppKey); + rpcGetMDMTokenReq.setAppSecret(mdmAppSec); + ByteArrayOutputStream outputStream = null; + List relshipProves = new ArrayList<>(); + + //逐个处理文件 + for (String fileUrl : fileUrlList) { + //1. 获取 OSS 下载的文件流 + String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1); + outputStream = ossServer.downloadFileServer(fileName); + //2. 将下载到的文件上传到 MDM 系统中 + try { + //获取 token 设置到 header + Map headers = new HashMap<>(); + headers.put("Authorization", getMdmAccessToken(rpcGetMDMTokenReq)); + //将文件流编辑为 formdata 格式的数据 + MultiValueMap param = new LinkedMultiValueMap<>(); + ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray()) { + @Override + public String getFilename() throws IllegalStateException { + return fileName; + } + }; + param.add("file", resource); + //上传文件 + responseEntity = RestTemplateUtil.post(url, headers, param, MDMResultDTO.class); + log.info("url:{}, header:{}, request:{} response statusCode:{}", url, JSONObject.toJSONString(headers), JSONObject.toJSONString(param, SerializerFeature.IgnoreErrorGetter), JSONObject.toJSONString(responseEntity.getStatusCode())); + Map data = (Map) responseEntity.getBody().getData(); + SkrRelshipProve skrRelshipProve= BeanUtil.fillBeanWithMap(data, new SkrRelshipProve(), false); + relshipProves.add(skrRelshipProve); + } catch (Exception e) { + log.info("调用MDM接口出错{}", e.getMessage()); + throw new ApiException(e.getMessage()); + } finally { + outputStream.close(); + } + } + + return relshipProves; + } public String createQualifyVerify(RpcCreateQualifyVerifyReq rpcRequest) throws ApiException{ String url = mdmBaseUrl + "/api/openapi/runtime/form/startFraQualExamWithData"; diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java index 374f0f671..3430521af 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java @@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; + /** * @Author: young.yu * @Date: 2023-06-14 13:47 @@ -28,7 +30,7 @@ public class FlowController { private FlowService flowService; @PostMapping("/qualifyVerify/create") @ApiOperation("发起加盟商资质审核") - public ResponseResult createQualifyVerify(@RequestBody CreateQualifyVerifyReq request) throws ApiException { + public ResponseResult createQualifyVerify(@RequestBody CreateQualifyVerifyReq request) throws ApiException, IOException { flowService.createQualifyVerify(request); return ResponseResult.success(); } diff --git a/coolstore-partner-webb/src/main/resources/application-ab.properties b/coolstore-partner-webb/src/main/resources/application-ab.properties index 0824c1f2a..3b37d8171 100644 --- a/coolstore-partner-webb/src/main/resources/application-ab.properties +++ b/coolstore-partner-webb/src/main/resources/application-ab.properties @@ -71,7 +71,7 @@ xxl.job.executor.logpath = logs/xxl-job/jobhandler xxl.job.executor.logretentiondays = 3 xxl.job.accessToken = -hs.mdm.baseUrl=http://36.7.115.86:10112/ +hs.mdm.baseUrl=http://36.7.115.86:10112 hs.mdm.appkey = HSAYPartner hs.mdm.appsec = ab39fedb886fa3587c7f517551976de8b2606f5511fd8f8675266825d74c5cd3 diff --git a/coolstore-partner-webb/src/main/resources/application-dev.properties b/coolstore-partner-webb/src/main/resources/application-dev.properties index dfded31a0..82a885d2c 100644 --- a/coolstore-partner-webb/src/main/resources/application-dev.properties +++ b/coolstore-partner-webb/src/main/resources/application-dev.properties @@ -60,7 +60,7 @@ weixin.appSecret=245a483747e6e9f8762d3e8539cf0318 signKey=77fea013c3a6459685b83c21a2fc3411 #MDM -hs.mdm.baseUrl=http://10.56.21.30/ +hs.mdm.baseUrl=http://10.56.21.30 hs.mdm.appkey = HSAYPartner hs.mdm.appsec = ab39fedb886fa3587c7f517551976de8b2606f5511fd8f8675266825d74c5cd3 diff --git a/coolstore-partner-webb/src/main/resources/application-local.properties b/coolstore-partner-webb/src/main/resources/application-local.properties index fc6389d30..541ecac8c 100644 --- a/coolstore-partner-webb/src/main/resources/application-local.properties +++ b/coolstore-partner-webb/src/main/resources/application-local.properties @@ -66,7 +66,7 @@ weixin.appSecret=245a483747e6e9f8762d3e8539cf0318 signKey=77fea013c3a6459685b83c21a2fc3411 #MDM -hs.mdm.baseUrl=http://10.56.21.30/ +hs.mdm.baseUrl=http://10.56.21.30 hs.mdm.appkey = HSAYPartner hs.mdm.appsec = ab39fedb886fa3587c7f517551976de8b2606f5511fd8f8675266825d74c5cd3