From c0b98878514aa8a2b2592f7da0eb36717a9bee00 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Wed, 11 Dec 2024 21:19:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=95=86=E5=93=81=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++ .../controller/GoodsSearchController.java | 27 ++++++ .../goodsSearch/dto/GoodsSearchRequest.java | 13 +++ .../goodsSearch/dto/GoodsSearchResponse.java | 54 +++++++++++ .../service/GoodsSearchService.java | 89 +++++++++++++++++++ src/main/resources/application.yaml | 5 ++ 6 files changed, 195 insertions(+) create mode 100644 src/main/java/cn/lihongjie/coal/goodsSearch/controller/GoodsSearchController.java create mode 100644 src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchRequest.java create mode 100644 src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchResponse.java create mode 100644 src/main/java/cn/lihongjie/coal/goodsSearch/service/GoodsSearchService.java diff --git a/pom.xml b/pom.xml index 7d8276d2..f1fb7357 100644 --- a/pom.xml +++ b/pom.xml @@ -437,6 +437,13 @@ + + com.aliyun.api.gateway + sdk-core-java + 1.1.7 + + + diff --git a/src/main/java/cn/lihongjie/coal/goodsSearch/controller/GoodsSearchController.java b/src/main/java/cn/lihongjie/coal/goodsSearch/controller/GoodsSearchController.java new file mode 100644 index 00000000..af6c85e5 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/goodsSearch/controller/GoodsSearchController.java @@ -0,0 +1,27 @@ +package cn.lihongjie.coal.goodsSearch.controller; + +import cn.lihongjie.coal.goodsSearch.dto.GoodsSearchRequest; +import cn.lihongjie.coal.goodsSearch.dto.GoodsSearchResponse; +import cn.lihongjie.coal.goodsSearch.service.GoodsSearchService; + +import org.springframework.web.bind.annotation.RequestMapping; + +@RequestMapping("/goodsSearch") +@org.springframework.web.bind.annotation.RestController +public class GoodsSearchController { + + + private final GoodsSearchService goodsSearchService; + + public GoodsSearchController(GoodsSearchService goodsSearchService) { + this.goodsSearchService = goodsSearchService; + } + + @RequestMapping("/search") + public GoodsSearchResponse search(GoodsSearchRequest request) { + + + return + goodsSearchService.search(request); + } +} diff --git a/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchRequest.java b/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchRequest.java new file mode 100644 index 00000000..e711269a --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchRequest.java @@ -0,0 +1,13 @@ +package cn.lihongjie.coal.goodsSearch.dto; + +import lombok.Data; + +import java.util.*; + +@Data +public class GoodsSearchRequest { + + + private String code; + +} diff --git a/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchResponse.java b/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchResponse.java new file mode 100644 index 00000000..2affb497 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/goodsSearch/dto/GoodsSearchResponse.java @@ -0,0 +1,54 @@ +package cn.lihongjie.coal.goodsSearch.dto; + +import lombok.Data; + +import java.util.*; + +@Data +public class GoodsSearchResponse { + + /** + * { + * "flag": "true", + * "remark": "查询成功!", + * "code": "6938166920785", //条形码 + * "goodsName": "苹果醋",//商品名称 + * "manuName": "新乡市和丝露饮品有限公司", //厂商 + * "spec": "268ml", //规格 + * "price": "3.00", //参考价格(单位:元) + * "trademark": "醋美人生", //商标/品牌名称 + * + * "img": "http://app2.showapi.com/img/barCode_img/2f7e639b-aa2f-4248-ae79-f0acc6ea56e6.jpg", //图片地址 + * "ret_code": "0", + * "goodsType": "食品、饮料和烟草>>饮料", //商品分类 + * "sptmImg": "http://app2.showapi.com/img/barCode_img/20161116/14792662xxxxxxx.png", //条码图片 + * "ycg": "中国", //原产地(可能无此参数信息) + * "engName": "cumeirensheng", // + * "note": "" //备注信息 + * } + */ + + private String flag; + + private String remark; + + private String code; + + private String goodsName; + + private String manuName; + + private String spec; + + private String price; + + private String trademark; + + private String img; + + private String goodsType; + + private String sptmImg; + + private String ycg; +} diff --git a/src/main/java/cn/lihongjie/coal/goodsSearch/service/GoodsSearchService.java b/src/main/java/cn/lihongjie/coal/goodsSearch/service/GoodsSearchService.java new file mode 100644 index 00000000..f2a305c2 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/goodsSearch/service/GoodsSearchService.java @@ -0,0 +1,89 @@ +package cn.lihongjie.coal.goodsSearch.service; + +import cn.lihongjie.coal.goodsSearch.dto.GoodsSearchRequest; +import cn.lihongjie.coal.goodsSearch.dto.GoodsSearchResponse; + +import com.alibaba.cloudapi.sdk.client.ApacheHttpClient; +import com.alibaba.cloudapi.sdk.enums.HttpMethod; +import com.alibaba.cloudapi.sdk.enums.ParamPosition; +import com.alibaba.cloudapi.sdk.enums.Scheme; +import com.alibaba.cloudapi.sdk.model.ApiCallback; +import com.alibaba.cloudapi.sdk.model.ApiRequest; +import com.alibaba.cloudapi.sdk.model.ApiResponse; +import com.alibaba.cloudapi.sdk.model.HttpClientBuilderParams; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import jakarta.annotation.PostConstruct; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class GoodsSearchService { + + @Autowired ObjectMapper objectMapper; + @Value("${goods.search.ak}") + private String ak; + @Value("${goods.search.sk}") + private String sk; + + @PostConstruct + public void init() { + + HttpClientBuilderParams httpParam = new HttpClientBuilderParams(); + httpParam.setAppKey(ak); + httpParam.setAppSecret(sk); + + Client.getInstance().init(httpParam); + } + + @SneakyThrows + public GoodsSearchResponse search(GoodsSearchRequest request) { + + ApiResponse response = Client.getInstance().search(request.getCode()); + + String bodyStr = response.getBodyStr(); + + ObjectNode jsonNodes = objectMapper.readValue(bodyStr, ObjectNode.class); + + return objectMapper.convertValue( + jsonNodes.get("showapi_res_body"), GoodsSearchResponse.class); + } + + public static class Client extends ApacheHttpClient { + public static final String HOST = "ali-barcode.showapi.com"; + static Client instance = new Client(); + + public static Client getInstance() { + return instance; + } + + public void init(HttpClientBuilderParams httpClientBuilderParams) { + httpClientBuilderParams.setScheme(Scheme.HTTPS); + httpClientBuilderParams.setHost(HOST); + super.init(httpClientBuilderParams); + } + + public void search(String code, ApiCallback callback) { + String path = "/barcode"; + ApiRequest request = new ApiRequest(HttpMethod.GET, path); + request.addParam("code", code, ParamPosition.QUERY, true); + + sendAsyncRequest(request, callback); + } + + public ApiResponse search(String code) { + String path = "/barcode"; + ApiRequest request = new ApiRequest(HttpMethod.GET, path); + request.addParam("code", code, ParamPosition.QUERY, true); + + return sendSyncRequest(request); + } + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index ad244dd2..9c390bf2 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -342,3 +342,8 @@ aliyun: dust: url: "http://dust.0531yun.cn/" + +goods: + search: + ak: 24805627 + sk: b787218aacfea062e2287c2cdfe41511 \ No newline at end of file