diff --git a/mall-ebtp-cloud-attachment-sdk/pom.xml b/mall-ebtp-cloud-attachment-sdk/pom.xml new file mode 100644 index 0000000..3c48c2d --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + com.chinaunicom.ebtp + mall-ebtp-cloud-attachment-sdk + 0.0.1 + + + com.chinaunicom.ebtp + mall-ebtp-cloud-parent + 0.0.1 + ../mall-ebtp-cloud-parent + + + + + com.chinaunicom.ebtp + mall-ebtp-cloud-mvc-starter + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + io.github.openfeign + feign-okhttp + + + org.projectlombok + lombok + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + nexus-aliyun + Nexus aliyun + http://maven.aliyun.com/nexus/content/groups/public + + + + + + ettp-host-release + Install to ettp center + http://zentao.jlcucc.com:60000/repository/ettp-releases/ + + + + diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/AttachmentClient.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/AttachmentClient.java new file mode 100644 index 0000000..1f60dd4 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/AttachmentClient.java @@ -0,0 +1,65 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.api; + +import java.io.File; +import java.util.List; +import java.util.Optional; + +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentDetail; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentEntity; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.UploadObject; + +/** + * 附件客户端工具类 + * + * @author Ajaxfan + */ +public interface AttachmentClient { + + /** + * @return 创建业务ID + */ + Optional getBusinessId(); + + /** + * 查询业务ID下的所有附件信息 + * + * @param bid + * @return + */ + Optional findByBusinessId(List businessIdList); + + /** + * 查询指定Id的对象信息 + * + * @param oid + * @return + */ + Optional findByObjectId(String objectId); + + /** + * 下载业务ID下的所有资源 + * + * @param bid + * @return + */ + Optional downloadFilesByBusinessId(String businessId); + + /** + * 下载指定的资源数据 + * + * @param bid + * @param oid + * @return + */ + Optional downloadFileByObjectId(String objectId); + + /** + * 上传资源文件 + * + * @param bid + * @param file + * @return + */ + Optional upload(Long businessId, File file); + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java new file mode 100644 index 0000000..6b6a830 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/api/DefaultAttachmentClient.java @@ -0,0 +1,105 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.api; + +import java.io.File; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.convertor.FileConvertor; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentDetail; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentEntity; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.FeedbackMessage; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.Snowflake; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.UploadObject; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.param.QueryParameter; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.service.QueryService; + +/** + * 附件工具客户端默认实现 + * + * @author Ajaxfan + */ +@Primary +@Component +public class DefaultAttachmentClient implements AttachmentClient { + + /* 附件工具类服务 */ + private @Autowired QueryService queryService; + + /** + * 获取业务ID + */ + @Override + public Optional getBusinessId() { + Snowflake snowflake = queryService.getSnokflakId(); + + if (Objects.isNull(snowflake)) { + return Optional.empty(); + } + return Optional.of(snowflake.getId()); + } + + /** + * 查询指定Id文件的详细信息 + * + * @param objectId + * @return + */ + @Override + public Optional findByObjectId(String objectId) { + AttachmentEntity entity = queryService.getObjectDetail(objectId); + return Optional.ofNullable(entity); + } + + /** + * 通过业务ID查找附件信息 + * + * @param businessIdList 业务ID列表 + * @return + */ + @Override + public Optional findByBusinessId(List businessIdList) { + QueryParameter param = new QueryParameter(businessIdList); + AttachmentDetail attachemtnDetail = queryService.getAttachmentDetails(param); + + return Optional.ofNullable(attachemtnDetail); + } + + /** + * @param businessId + * @return + */ + @Override + public Optional downloadFilesByBusinessId(String businessId) { + return Optional.ofNullable(queryService.downloadByBid(businessId)); + } + + /** + * @param objectId + * @return + */ + @Override + public Optional downloadFileByObjectId(String objectId) { + return Optional.ofNullable(queryService.downloadByOid(objectId)); + } + + /** + * @param businessId + * @param file + * @return + */ + @Override + public Optional upload(Long businessId, File file) { + Objects.requireNonNull(businessId); + Objects.requireNonNull(file); + + FeedbackMessage feedback = queryService.handleFileUpload(businessId, FileConvertor.toMultipartFile(file)); + + return Optional.ofNullable(new UploadObject().setId(feedback.getOid())); + } + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/FeignSupportConfig.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/FeignSupportConfig.java new file mode 100644 index 0000000..c44c3d9 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/FeignSupportConfig.java @@ -0,0 +1,8 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.config; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FeignSupportConfig { + +} \ No newline at end of file diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/SDKAutoConfiguration.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/SDKAutoConfiguration.java new file mode 100644 index 0000000..10ebcf8 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/config/SDKAutoConfiguration.java @@ -0,0 +1,12 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.config; + +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableFeignClients(basePackages = "com.chinaunicom.ebtp.mall.cloud.attachment.sdk") +@ComponentScan(basePackages = "com.chinaunicom.ebtp.mall.cloud.attachment.sdk") +public class SDKAutoConfiguration { + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/FileConvertor.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/FileConvertor.java new file mode 100644 index 0000000..4b0f96b --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/convertor/FileConvertor.java @@ -0,0 +1,44 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.convertor; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; + +/** + * 文件转换器 + * @author Ajaxfan + */ +public final class FileConvertor { + + /** + * 将 File 对象转换为 MultipartFile 对象 + * @param file 原始文件对象 + * @return + */ + public static MultipartFile toMultipartFile(File file) { + FileItemFactory factory = new DiskFileItemFactory(16, null); + FileItem item = factory.createItem("file", "text/plain", true, file.getName()); + + int bytesRead = 0; + byte[] buffer = new byte[8192]; + + try (FileInputStream fis = new FileInputStream(file)) { + try (OutputStream os = item.getOutputStream()) { + while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return new CommonsMultipartFile(item); + } + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/QueryServiceFallback.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/QueryServiceFallback.java new file mode 100644 index 0000000..26d1449 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/fallback/QueryServiceFallback.java @@ -0,0 +1,46 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.fallback; + +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentDetail; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentEntity; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.FeedbackMessage; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.Snowflake; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.param.QueryParameter; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.service.QueryService; + +@Component +public class QueryServiceFallback implements QueryService { + + @Override + public Snowflake getSnokflakId() { + return null; + } + + @Override + public AttachmentEntity getObjectDetail(String oid) { + return null; + } + + @Override + public AttachmentDetail getAttachmentDetails(QueryParameter param) { + return null; + } + + @Override + public FeedbackMessage handleFileUpload(Long businessId, MultipartFile file) { + return null; + } + + @Override + public byte[] downloadByBid(String bid) { + return null; + } + + @Override + public byte[] downloadByOid(String oid) { + return null; + } + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentDetail.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentDetail.java new file mode 100644 index 0000000..c2b6799 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentDetail.java @@ -0,0 +1,14 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model; + +import java.util.Hashtable; +import java.util.List; + +/** + * 附件信息表单 + * + * @author Ajaxfan + */ +public class AttachmentDetail extends Hashtable> { + private static final long serialVersionUID = -6579549900874220624L; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentEntity.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentEntity.java new file mode 100644 index 0000000..092fca5 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/AttachmentEntity.java @@ -0,0 +1,19 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class AttachmentEntity { + + /* 附件ID */ + private String id; + + /* 业务ID */ + private String bid; + + /* 附件名称 */ + private String filename; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/FeedbackMessage.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/FeedbackMessage.java new file mode 100644 index 0000000..b914c62 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/FeedbackMessage.java @@ -0,0 +1,14 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class FeedbackMessage { + + private boolean success; + private String oid; + private String message; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/Snowflake.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/Snowflake.java new file mode 100644 index 0000000..8474557 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/Snowflake.java @@ -0,0 +1,10 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model; + +import lombok.Data; + +@Data +public class Snowflake { + + private Long id; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/UploadObject.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/UploadObject.java new file mode 100644 index 0000000..b6b2323 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/model/UploadObject.java @@ -0,0 +1,12 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class UploadObject { + + private String id; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/param/QueryParameter.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/param/QueryParameter.java new file mode 100644 index 0000000..9a0c18d --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/param/QueryParameter.java @@ -0,0 +1,18 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.param; + +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = true) +public class QueryParameter { + + private List bidList; + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/QueryService.java b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/QueryService.java new file mode 100644 index 0000000..3b05c00 --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/java/com/chinaunicom/ebtp/mall/cloud/attachment/sdk/service/QueryService.java @@ -0,0 +1,43 @@ +package com.chinaunicom.ebtp.mall.cloud.attachment.sdk.service; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.config.FeignSupportConfig; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.fallback.QueryServiceFallback; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentDetail; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentEntity; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.FeedbackMessage; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.Snowflake; +import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.param.QueryParameter; + +@FeignClient(value = "core-service-ebtp-updownload", configuration = FeignSupportConfig.class, fallback = QueryServiceFallback.class) +public interface QueryService { + + @RequestMapping(method = RequestMethod.GET, value = "v1/business/id") + Snowflake getSnokflakId(); + + @RequestMapping(method = RequestMethod.GET, value = "v1/attachment/find/oid/{oid}") + AttachmentEntity getObjectDetail(@PathVariable("oid") String oid); + + @RequestMapping(method = RequestMethod.POST, value = "v1/attachment/find") + AttachmentDetail getAttachmentDetails(@RequestBody QueryParameter param); + + @RequestMapping(value = "/v1/attachment/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + FeedbackMessage handleFileUpload(@RequestPart(value = "businessId") Long businessId, + @RequestPart(value = "file") MultipartFile file); + + @GetMapping("/v1/attachment/download/bid/{bid}") + byte[] downloadByBid(@PathVariable("bid") String bid); + + @GetMapping("/v1/attachment/download/oid/{oid}") + byte[] downloadByOid(@PathVariable("oid") String oid); + +} diff --git a/mall-ebtp-cloud-attachment-sdk/src/main/resources/META-INF/spring.factories b/mall-ebtp-cloud-attachment-sdk/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..f11530a --- /dev/null +++ b/mall-ebtp-cloud-attachment-sdk/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +# AutoConfiguration +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.chinaunicom.ebtp.mall.cloud.attachment.sdk.config.SDKAutoConfiguration \ No newline at end of file diff --git a/mall-ebtp-cloud-parent/pom.xml b/mall-ebtp-cloud-parent/pom.xml index d7b830f..a2fcca2 100644 --- a/mall-ebtp-cloud-parent/pom.xml +++ b/mall-ebtp-cloud-parent/pom.xml @@ -78,6 +78,11 @@ mall-ebtp-cloud-seata-starter 0.0.1 + + com.chinaunicom.ebtp + mall-ebtp-cloud-attachment-sdk + 0.0.1 + diff --git a/pom.xml b/pom.xml index 2480824..149aa9a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,5 @@ - + 4.0.0 @@ -350,22 +348,17 @@ - + META-INF/spring.handlers - + META-INF/spring.factories - + META-INF/spring.schemas - - + + ${start-class} @@ -394,7 +387,8 @@ mall-ebtp-cloud-seata-starter uboot-common uboot-core - + mall-ebtp-cloud-attachment-sdk + China Unicom diff --git a/uboot-core/pom.xml b/uboot-core/pom.xml index 7468135..0009a35 100644 --- a/uboot-core/pom.xml +++ b/uboot-core/pom.xml @@ -1,28 +1,28 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 - - com.chinaunicom.ebtp - mall-ebtp-cloud-parent - 0.0.1 - ../mall-ebtp-cloud-parent - + + com.chinaunicom.ebtp + mall-ebtp-cloud-parent + 0.0.1 + ../mall-ebtp-cloud-parent + - com.chinaunicom.mall.ebtp - uboot-core - 0.0.1 - uboot-core + com.chinaunicom.mall.ebtp + uboot-core + 0.0.1 + uboot-core - - - - com.chinaunicom.mall.ebtp - uboot-common - 0.0.1 + - + + com.chinaunicom.mall.ebtp + uboot-common + 0.0.1 + + com.chinaunicom.ebtp @@ -54,25 +54,25 @@ mybatis-plus-generator - + - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - - - src/main/resources - true - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + src/main/resources + true + + + \ No newline at end of file