From 850a524cced18e275ae89aea5ffdeaa30ddd687f Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期日, 08 十月 2023 17:17:09 +0800
Subject: [PATCH] 唯品会接口修改增加必要的3个字段
---
fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/SearchController.java | 1162 +++++++++++++++++++++++++++++----------------------------
1 files changed, 584 insertions(+), 578 deletions(-)
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/SearchController.java b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/SearchController.java
index 93266ce..3004e50 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/SearchController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/SearchController.java
@@ -1,578 +1,584 @@
-package com.yeshi.fanli.controller.wxmp.v1;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpSession;
-
-import com.yeshi.fanli.entity.SystemEnum;
-import com.yeshi.fanli.util.SystemInfoUtil;
-import org.springframework.core.task.TaskExecutor;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.yeshi.utils.JsonUtil;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.yeshi.fanli.dto.ConfigParamsDTO;
-import com.yeshi.fanli.dto.WXMPAcceptData;
-import com.yeshi.fanli.dto.jd.JDFilter;
-import com.yeshi.fanli.dto.jd.JDSearchFilter;
-import com.yeshi.fanli.dto.jd.JDSearchResult;
-import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
-import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
-import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
-import com.yeshi.fanli.entity.accept.AcceptData;
-import com.yeshi.fanli.entity.bus.search.HotSearch;
-import com.yeshi.fanli.entity.goods.CommonGoods;
-import com.yeshi.fanli.entity.jd.JDGoods;
-import com.yeshi.fanli.entity.system.ConfigKeyEnum;
-import com.yeshi.fanli.log.LogHelper;
-import com.yeshi.fanli.service.inter.brand.BrandInfoService;
-import com.yeshi.fanli.service.inter.config.ConfigService;
-import com.yeshi.fanli.service.inter.config.HotSearchService;
-import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
-import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
-import com.yeshi.fanli.service.manger.goods.jd.JDGoodsLinkParseManager;
-import com.yeshi.fanli.tag.PageEntity;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.factory.CommonGoodsFactory;
-import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
-import com.yeshi.fanli.util.jd.JDApiUtil;
-import com.yeshi.fanli.util.jd.JDUtil;
-import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
-import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
-import com.yeshi.fanli.util.taobao.SearchFilterUtil;
-import com.yeshi.fanli.util.taobao.TaoBaoUtil;
-import com.yeshi.fanli.vo.goods.GoodsDetailVO;
-
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
-@Controller("WXMPSearchController")
-@RequestMapping("/wxmp/api/v1/search")
-public class SearchController {
-
- @Resource
- private ConfigService configService;
-
- @Resource
- private HongBaoManageService hongBaoManageService;
-
- @Resource
- private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
-
- @Resource(name = "taskExecutor")
- private TaskExecutor executor;
-
- @Resource
- private BrandInfoService brandInfoService;
-
- @Resource
- private JDGoodsLinkParseManager jdGoodsLinkParseManager;
-
- @Resource
- private HotSearchService hotSearchService;
-
- /**
- * 绮樿创鏉夸俊鎭帹鑽�
- *
- * @param acceptData
- * @param url
- * 鍟嗗搧閾炬帴
- * @param out
- */
- @RequestMapping(value = "getRecommendInfo", method = RequestMethod.POST)
- public void getRecommendInfo(WXMPAcceptData acceptData, String text, Long uid, PrintWriter out) {
- if (StringUtil.isNullOrEmpty(text)) {
- out.print(JsonUtil.loadFalseResult("鍊间负绌�"));
- return;
- }
-
- // 鍘婚櫎鍓嶅悗绌烘牸
- int type = 1;
- text = text.trim();
- String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
- Pattern p = Pattern.compile(URL_REGEX);
- Matcher matcher = p.matcher(text);
- if (!matcher.find()) {// 涓嶅寘鍚摼鎺�
- if (text.length() > 256) {
- out.print(JsonUtil.loadFalseResult("鍊艰繃闀�"));
- return;
- }
- String pattern = "^[A-Za-z0-9-]+$";
- if (Pattern.matches(pattern, text.replace(" ", ""))) {// 鍒犻櫎绌烘牸
- out.println(JsonUtil.loadFalseResult("涓嶆敮鎸佹帹鑽�"));
- return;
- }
-
- LogHelper.test("鏍规嵁绮樿创鏉挎帹鑽�:" + text);
- if (text.length() > 80) {
- out.print(JsonUtil.loadFalseResult("鍊艰繃闀�"));
- return;
- }
-
- if (!StringUtil.isNullOrEmpty(TaoBaoUtil.parseSystemTaoToken(text))) {
- out.print(JsonUtil.loadFalseResult("涓嶆敮鎸佹帹鑽�"));
- return;
- }
- JSONObject data = new JSONObject();
- data.put("type", type);
- data.put("title", text);
- out.print(JsonUtil.loadTrueResult(data));
- return;
- }
-
- type = 2;
- CommonGoods commonGoods = null;
- text = matcher.group();
- String jdId = JDUtil.getJDGoodsId(text);
- if (StringUtil.isNullOrEmpty(jdId)) {
- jdId = JDUtil.getJDGoodsIdByWeiXin(text); // 寰俊閾炬帴
- if (StringUtil.isNullOrEmpty(jdId) && text.contains("u.jd.com")) {
- jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(text); // 棰嗗埜鐭繛鎺�
- }
- }
- if (!StringUtil.isNullOrEmpty(jdId)) {
- JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(jdId));
- if (goods != null) {
- // 楂樼骇鎺ュ彛 -- 淇℃伅鏇村畬鏁�
- JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(jdId));
- if (jdGoods != null) {
- commonGoods = CommonGoodsFactory.create(jdGoods);
- } else {
- commonGoods = CommonGoodsFactory.create(goods);
- }
- } else {
- type = 3;
- goods = JDUtil.getSimpleGoodsInfo(jdId);
- if (goods != null) {
- commonGoods = new CommonGoods();
- commonGoods.setTitle(goods.getSkuName());
- commonGoods.setPicture(goods.getPicUrl());
- }
- }
- } else {
- String pddId = PinDuoDuoUtil.getPDDGoodsId(text);
- if (!StringUtil.isNullOrEmpty(pddId)) {
- PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(pddId));
- if (goods != null) {
- commonGoods = CommonGoodsFactory.create(goods);
- } else {
- type = 3;
- goods = PinDuoDuoUtil.getPDDGoodsInfo(pddId);
- if (goods != null) {
- commonGoods = new CommonGoods();
- commonGoods.setTitle(goods.getGoodsName());
- commonGoods.setPicture(goods.getGoodsThumbnailUrl());
- }
- }
- }
- }
-
- if (commonGoods == null) {
- out.println(JsonUtil.loadFalseResult("鏆傛湭鎵惧埌璇ュ晢鍝侊紝璇风◢鍚庡啀璇曪紒"));
- return;
- }
-
- if (type == 3) {
- JSONObject data = new JSONObject();
- JSONObject goodsJSON = new JSONObject();
- goodsJSON.put("title", commonGoods.getTitle());
- goodsJSON.put("pictUrl", commonGoods.getPicture());
- data.put("type", type);
- data.put("desc", "璇ュ晢鍝佹棤鎺ㄥ箍淇℃伅");
- data.put("goods", goodsJSON);
- out.print(JsonUtil.loadTrueResult(data));
- return;
- }
-
- JSONObject data = new JSONObject();
- Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
- .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
- data.put("type", type);
- data.put("goods", gson.toJson(GoodsDetailVOFactory.convertCommonGoods(commonGoods,
- orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion(),acceptData.getSystem()))));
- out.print(JsonUtil.loadTrueResult(data));
- return;
- }
-
- /**
- * 鐑棬鎼滅储
- *
- * @param acceptData
- * @param goodsType
- * @param out
- */
- @RequestMapping(value = "gethotsearch", method = RequestMethod.POST)
- public void getHotSearch(AcceptData acceptData, Integer goodsType, PrintWriter out) {
- // 榛樿娣樺疂
- if (goodsType == null) {
- goodsType = Constant.SOURCE_TYPE_TAOBAO;
- }
-
- List<HotSearch> list = hotSearchService.getHotSearchCache(goodsType,acceptData.getSystem());
- if (list == null || list.size() == 0) {
- out.print(JsonUtil.loadFalseResult("娌℃湁鏁版嵁"));
- return;
- }
- List<String> hotSearchList = new ArrayList<String>();
- if(list!=null)
- for (HotSearch hot : list)
- hotSearchList.add(hot.getName());
-
- JSONObject data = new JSONObject();
- data.put("count", list.size());
- data.put("hotSearchList", hotSearchList);
- data.put("helpLink", configService.getValue(ConfigKeyEnum.newerGonglue.getKey(), SystemInfoUtil.getSystem(acceptData)));
- out.print(JsonUtil.loadTrueResult(data));
- }
-
- /**
- * 鎼滅储鍊欓�夎瘝
- *
- * @param acceptData
- * @param kw
- * @param out
- */
- @RequestMapping(value = "suggestSearch", method = RequestMethod.POST)
- public void getSugguestSearch(WXMPAcceptData acceptData, String kw, Integer goodsType, PrintWriter out) {
- if (goodsType == null) {
- out.print(JsonUtil.loadFalseResult("骞冲彴绫诲瀷涓嶈兘涓虹┖"));
- return;
- }
-
- List<String> list = null;
- if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
- list = TaoBaoUtil.getSuguestSearch(kw);
- } else if (goodsType == Constant.SOURCE_TYPE_JD) {
- list = JDUtil.suggestSearch(kw);
- } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
- list = PinDuoDuoUtil.suggestSearch(kw);
- }
-
- if (list == null || list.size() == 0) {
- out.print(JsonUtil.loadFalseResult("鏆傛棤寤鸿鍐呭"));
- return;
- }
-
- JSONArray array = new JSONArray();
- for (String words : list) {
- array.add(words);
- }
- out.print(JsonUtil.loadTrueResult(array));
- }
-
- /**
- * 鎼滅储-鏂扮増
- *
- * @param acceptData
- * @param kw
- * @param page
- * @param filter
- * @param order
- * 閿�閲忕敱楂樺埌浣�:1 銆� 浠锋牸浠庨珮鍒颁綆:2 銆� 浠锋牸浠庝綆鍒伴珮:3 銆� 鎺ㄥ箍閲忛珮鍒颁綆:4锛堢患鍚堥粯璁わ級銆佽繑鍒╂瘮楂樺埌浣�:5
- * 銆佽繑鍒╂瘮浣庡埌楂�:6 銆佹帹鑽�20
- * @param startprice
- * @param endprice
- * @param fastFilter
- * @param out
- */
- @RequestMapping(value = "searchGoods")
- public void searchGoods(WXMPAcceptData acceptData, Integer goodsType, String key, Integer page, String filter,
- Integer order, Long uid, HttpSession session, PrintWriter out) {
- if (goodsType == null || goodsType < 2 || goodsType > 3) {
- out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
- return;
- }
-
- if (StringUtil.isNullOrEmpty(key)) {
- out.print(JsonUtil.loadFalseResult(1, "璇疯緭鍏ユ悳绱㈠唴瀹�"));
- return;
- }
-
- if (page == null || page < 1) {
- page = 1;
- }
-
- final String searchkey = key.trim();
- if (searchkey.startsWith("http://") || searchkey.startsWith("https://")) {
- JSONObject data = new JSONObject();
- data.put("count", 0);
- data.put("list", new JSONArray());
- out.print(JsonUtil.loadTrueResult(data));
- return;
- }
-
- /*--------- 浜笢鍟嗗搧 -------*/
- if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) {
- searchJDGoods(acceptData, searchkey, page, filter, order, out);
- return;
- }
-
- /*-------- 鎷煎澶氬晢鍝� -------*/
- if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
- searchPDDGoods(acceptData, searchkey, page, filter, order, out);
- return;
- }
- }
-
- /**
- * 浜笢
- *
- * @param kw
- * @param page
- * @param filter
- * @param order
- * @param startprice
- * @param endprice
- * @return
- */
- private void searchJDGoods(WXMPAcceptData acceptData, String key, Integer page, String filter, Integer order,
- PrintWriter out) {
- SystemEnum system= SystemInfoUtil.getSystemByWXCXCAppId(acceptData.getAppId());
- JDSearchResult result = null;
- boolean hasCoupon = false;
- String way = configService.getValue(ConfigKeyEnum.jdApiSearchKey.getKey(), system);
- if ("1".equals(way)) {
- JDFilter filterAPI = new JDFilter();
- filterAPI.setKeyword(SearchFilterUtil.filterSearchContent(key));
- filterAPI.setPageIndex(page);
- filterAPI.setPageSize(Constant.PAGE_SIZE);
-
- if (order != null) {
- int sort = order.intValue();
- switch (sort) {
- case 1: // 閿�閲� desc
- filterAPI.setSort(JDFilter.SORT_DESC);
- filterAPI.setSortName(JDFilter.SORTNAME_ORDER_COUNT_30DAYS);
- break;
- case 2: // 浠锋牸鈥攄esc
- filterAPI.setSort(JDFilter.SORT_DESC);
- filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
- break;
- case 3: // 浠锋牸鈥攁sc
- filterAPI.setSort(JDFilter.SORT_ASC);
- filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
- break;
- case 4: // 杩斿埄姣斺�擠ESC
- filterAPI.setSort(JDFilter.SORT_DESC);
- filterAPI.setSortName(JDFilter.SORTNAME_COMMISSION_SHARE);
- break;
- default:
- break;
- }
- }
-
- if (!StringUtil.isNullOrEmpty(filter)) {
- JSONObject jsonfilter = JSONObject.fromObject(filter);
- Boolean coupon = jsonfilter.optBoolean("coupon");
- if (coupon != null && coupon) {
- hasCoupon = true;
- filterAPI.setIsCoupon(1); // 鏈夊埜
- }
-
- Boolean zy = jsonfilter.optBoolean("zy");
- if (zy != null && zy) {
- filterAPI.setOwner("g"); // 鑷惀
- }
-
- String minPrice = jsonfilter.optString("minPrice");
- if (!StringUtil.isNullOrEmpty(minPrice)) {
- filterAPI.setPricefrom(Double.parseDouble(minPrice));
- }
-
- String maxPrice = jsonfilter.optString("maxPrice");
- if (!StringUtil.isNullOrEmpty(maxPrice)) {
- filterAPI.setPriceto(Double.parseDouble(maxPrice));
- }
- }
-
- result = JDApiUtil.queryByKey(filterAPI);
- } else {
- // 缃戦〉鐖彇
- JDSearchFilter jdfilter = new JDSearchFilter();
- jdfilter.setKey(SearchFilterUtil.filterSearchContent(key));
- jdfilter.setPageNo(page);
- jdfilter.setPageSize(Constant.PAGE_SIZE);
-
- if (order != null) {
- int sort = order.intValue();
- switch (sort) {
- case 1: // 閿�閲� desc
- jdfilter.setSort(JDSearchFilter.SORT_DESC);
- jdfilter.setSortName(JDSearchFilter.SORTNAME_ORDER_COUNT_30DAYS);
- break;
- case 2: // 浠锋牸鈥攄esc
- jdfilter.setSort(JDSearchFilter.SORT_DESC);
- jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
- break;
- case 3: // 浠锋牸鈥攁sc
- jdfilter.setSort(JDSearchFilter.SORT_ASC);
- jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
- break;
- case 4: // 杩斿埄姣斺�擠ESC
- jdfilter.setSort(JDSearchFilter.SORT_DESC);
- jdfilter.setSortName(JDSearchFilter.SORTNAME_COMMISSION_SHARE);
- break;
- default:
- break;
- }
- }
-
- if (!StringUtil.isNullOrEmpty(filter)) {
- JSONObject jsonfilter = JSONObject.fromObject(filter);
- Boolean coupon = jsonfilter.optBoolean("coupon");
- if (coupon != null && coupon) {
- hasCoupon = true;
- jdfilter.setHasCoupon(1); // 鏈夊埜
- }
-
- Boolean zy = jsonfilter.optBoolean("zy");
- if (zy != null && zy) {
- jdfilter.setIsZY(1); // 鑷惀
- }
-
- Boolean delivery = jsonfilter.optBoolean("delivery");
- if (delivery != null && delivery) {
- jdfilter.setDeliveryType(1); // 浜笢閰嶉��
- }
-
- String minPrice = jsonfilter.optString("minPrice");
- if (!StringUtil.isNullOrEmpty(minPrice)) {
- if (minPrice.contains(".")) {
- minPrice = minPrice.replace(".", "-");
- minPrice = minPrice.split("-")[0];
- }
- jdfilter.setFromPrice(Integer.parseInt(minPrice));
- }
-
- String maxPrice = jsonfilter.optString("maxPrice");
- if (!StringUtil.isNullOrEmpty(maxPrice)) {
- if (maxPrice.contains(".")) {
- maxPrice = maxPrice.replace(".", "-");
- maxPrice = maxPrice.split("-")[0];
- }
- jdfilter.setToPrice(Integer.parseInt(maxPrice));
- }
- }
- result = JDUtil.searchByKey(jdfilter);
-
- }
-
- long count = 0;
- JSONObject data = new JSONObject();
- JSONArray array = new JSONArray();
- if (result != null) {
- PageEntity pageEntity = result.getPageEntity();
- if (pageEntity != null) {
- count = pageEntity.getTotalCount();
- }
-
- List<JDGoods> goodsList = result.getGoodsList();
- if (goodsList != null && goodsList.size() > 0) {
- Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
- .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
- ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
- acceptData.getVersion(),acceptData.getSystem());
- for (JDGoods goods : goodsList) {
- GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
- if (hasCoupon) {
- if (goodsDetailVO.isHasCoupon()) {
- array.add(gson.toJson(goodsDetailVO));
- }
- } else {
- array.add(gson.toJson(goodsDetailVO));
- }
- }
- }
- }
-
- data.put("count", count);
- data.put("list", array);
- out.print(JsonUtil.loadTrueResult(data));
- }
-
- /**
- * 鎷煎澶�
- *
- * @param kw
- * @param page
- * @param filter
- * @param order
- * @param startprice
- * @param endprice
- * @return
- */
- private void searchPDDGoods(WXMPAcceptData acceptData, String key, Integer page, String filter, Integer order,
- PrintWriter out) {
- PDDSearchFilter pddfilter = new PDDSearchFilter();
- pddfilter.setKw(SearchFilterUtil.filterSearchContent(key));
- pddfilter.setPage(page);
- pddfilter.setPageSize(Constant.PAGE_SIZE);
-
- if (order != null) {
- int sort = order.intValue();
- switch (sort) {
- case 1: // 閿�閲� desc
- pddfilter.setSortType(6);
- break;
- case 2: // 浠锋牸鈥攄esc
- pddfilter.setSortType(4);
- break;
- case 3: // 浠锋牸鈥攁sc
- pddfilter.setSortType(3);
- break;
- case 4: // 杩斿埄姣斺�攄esc
- pddfilter.setSortType(2);
- break;
- default: // 缁煎悎鎺掑簭
- pddfilter.setSortType(0);
- break;
- }
- }
-
- if (!StringUtil.isNullOrEmpty(filter)) {
- JSONObject jsonfilter = JSONObject.fromObject(filter);
- Boolean coupon = jsonfilter.optBoolean("coupon");
- if (coupon != null && coupon) {
- pddfilter.setHasCoupon(true); // 鏈夊埜
- }
-
- Boolean brand = jsonfilter.optBoolean("brand");
- if (brand != null && brand) {
- pddfilter.setIsBrand(true); // 鏄惁鏄搧鐗�
- }
- }
-
- int count = 0;
- JSONObject data = new JSONObject();
- JSONArray array = new JSONArray();
-
- PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter);
- if (result != null) {
- count = result.getTotalCount();
- Gson gson = JsonUtil.getApiCommonGson();
- List<PDDGoodsDetail> goodsList = result.getGoodsList();
- if (goodsList != null && goodsList.size() > 0) {
- ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
- acceptData.getVersion(),acceptData.getSystem());
-
- for (PDDGoodsDetail goods : goodsList) {
- GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO);
- array.add(gson.toJson(goodsDetailVO));
- }
- }
- }
-
- data.put("count", count);
- data.put("list", array);
- out.print(JsonUtil.loadTrueResult(data));
- }
-}
+package com.yeshi.fanli.controller.wxmp.v1;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpSession;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.exception.pdd.PDDApiException;
+import com.yeshi.fanli.util.SystemInfoUtil;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.yeshi.utils.JsonUtil;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
+import com.yeshi.fanli.dto.WXMPAcceptData;
+import com.yeshi.fanli.dto.jd.JDFilter;
+import com.yeshi.fanli.dto.jd.JDSearchFilter;
+import com.yeshi.fanli.dto.jd.JDSearchResult;
+import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
+import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
+import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
+import com.yeshi.fanli.entity.accept.AcceptData;
+import com.yeshi.fanli.entity.bus.search.HotSearch;
+import com.yeshi.fanli.entity.goods.CommonGoods;
+import com.yeshi.fanli.entity.jd.JDGoods;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.brand.BrandInfoService;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.config.HotSearchService;
+import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.manger.goods.jd.JDGoodsLinkParseManager;
+import com.yeshi.common.entity.PageEntity;
+import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.factory.CommonGoodsFactory;
+import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
+import com.yeshi.fanli.util.jd.JDApiUtil;
+import com.yeshi.fanli.util.jd.JDUtil;
+import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
+import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
+import com.yeshi.fanli.util.taobao.SearchFilterUtil;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
+import com.yeshi.fanli.vo.goods.GoodsDetailVO;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+@Controller("WXMPSearchController")
+@RequestMapping("/wxmp/api/v1/search")
+public class SearchController {
+
+ @Resource
+ private ConfigService configService;
+
+ @Resource
+ private HongBaoManageService hongBaoManageService;
+
+ @Resource
+ private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
+
+ @Resource(name = "taskExecutor")
+ private TaskExecutor executor;
+
+ @Resource
+ private BrandInfoService brandInfoService;
+
+ @Resource
+ private JDGoodsLinkParseManager jdGoodsLinkParseManager;
+
+ @Resource
+ private HotSearchService hotSearchService;
+
+ /**
+ * 绮樿创鏉夸俊鎭帹鑽�
+ *
+ * @param acceptData
+ * @param url
+ * 鍟嗗搧閾炬帴
+ * @param out
+ */
+ @RequestMapping(value = "getRecommendInfo", method = RequestMethod.POST)
+ public void getRecommendInfo(WXMPAcceptData acceptData, String text, Long uid, PrintWriter out) {
+ if (StringUtil.isNullOrEmpty(text)) {
+ out.print(JsonUtil.loadFalseResult("鍊间负绌�"));
+ return;
+ }
+
+ // 鍘婚櫎鍓嶅悗绌烘牸
+ int type = 1;
+ text = text.trim();
+ String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
+ Pattern p = Pattern.compile(URL_REGEX);
+ Matcher matcher = p.matcher(text);
+ if (!matcher.find()) {// 涓嶅寘鍚摼鎺�
+ if (text.length() > 256) {
+ out.print(JsonUtil.loadFalseResult("鍊艰繃闀�"));
+ return;
+ }
+ String pattern = "^[A-Za-z0-9-]+$";
+ if (Pattern.matches(pattern, text.replace(" ", ""))) {// 鍒犻櫎绌烘牸
+ out.println(JsonUtil.loadFalseResult("涓嶆敮鎸佹帹鑽�"));
+ return;
+ }
+
+ LogHelper.test("鏍规嵁绮樿创鏉挎帹鑽�:" + text);
+ if (text.length() > 80) {
+ out.print(JsonUtil.loadFalseResult("鍊艰繃闀�"));
+ return;
+ }
+
+ if (!StringUtil.isNullOrEmpty(TaoBaoUtil.parseSystemTaoToken(text))) {
+ out.print(JsonUtil.loadFalseResult("涓嶆敮鎸佹帹鑽�"));
+ return;
+ }
+ JSONObject data = new JSONObject();
+ data.put("type", type);
+ data.put("title", text);
+ out.print(JsonUtil.loadTrueResult(data));
+ return;
+ }
+
+ type = 2;
+ CommonGoods commonGoods = null;
+ text = matcher.group();
+ String jdId = JDUtil.getJDGoodsId(text);
+ if (StringUtil.isNullOrEmpty(jdId)) {
+ jdId = JDUtil.getJDGoodsIdByWeiXin(text); // 寰俊閾炬帴
+ if (StringUtil.isNullOrEmpty(jdId) && text.contains("u.jd.com")) {
+ jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(text); // 棰嗗埜鐭繛鎺�
+ }
+ }
+ if (!StringUtil.isNullOrEmpty(jdId)) {
+ JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(jdId));
+ if (goods != null) {
+ // 楂樼骇鎺ュ彛 -- 淇℃伅鏇村畬鏁�
+ JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(jdId));
+ if (jdGoods != null) {
+ commonGoods = CommonGoodsFactory.create(jdGoods);
+ } else {
+ commonGoods = CommonGoodsFactory.create(goods);
+ }
+ } else {
+ type = 3;
+ goods = JDUtil.getSimpleGoodsInfo(jdId);
+ if (goods != null) {
+ commonGoods = new CommonGoods();
+ commonGoods.setTitle(goods.getSkuName());
+ commonGoods.setPicture(goods.getPicUrl());
+ }
+ }
+ } else {
+ String pddId = PinDuoDuoUtil.getPDDGoodsId(text);
+ if (!StringUtil.isNullOrEmpty(pddId)) {
+ PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(pddId));
+ if (goods != null) {
+ commonGoods = CommonGoodsFactory.create(goods);
+ } else {
+ type = 3;
+ goods = PinDuoDuoUtil.getPDDGoodsInfo(pddId);
+ if (goods != null) {
+ commonGoods = new CommonGoods();
+ commonGoods.setTitle(goods.getGoodsName());
+ commonGoods.setPicture(goods.getGoodsThumbnailUrl());
+ }
+ }
+ }
+ }
+
+ if (commonGoods == null) {
+ out.println(JsonUtil.loadFalseResult("鏆傛湭鎵惧埌璇ュ晢鍝侊紝璇风◢鍚庡啀璇曪紒"));
+ return;
+ }
+
+ if (type == 3) {
+ JSONObject data = new JSONObject();
+ JSONObject goodsJSON = new JSONObject();
+ goodsJSON.put("title", commonGoods.getTitle());
+ goodsJSON.put("pictUrl", commonGoods.getPicture());
+ data.put("type", type);
+ data.put("desc", "璇ュ晢鍝佹棤鎺ㄥ箍淇℃伅");
+ data.put("goods", goodsJSON);
+ out.print(JsonUtil.loadTrueResult(data));
+ return;
+ }
+
+ JSONObject data = new JSONObject();
+ Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
+ .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
+ data.put("type", type);
+ data.put("goods", gson.toJson(GoodsDetailVOFactory.convertCommonGoods(commonGoods,
+ orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion(),acceptData.getSystem()))));
+ out.print(JsonUtil.loadTrueResult(data));
+ return;
+ }
+
+ /**
+ * 鐑棬鎼滅储
+ *
+ * @param acceptData
+ * @param goodsType
+ * @param out
+ */
+ @RequestMapping(value = "gethotsearch", method = RequestMethod.POST)
+ public void getHotSearch(AcceptData acceptData, Integer goodsType, PrintWriter out) {
+ // 榛樿娣樺疂
+ if (goodsType == null) {
+ goodsType = Constant.SOURCE_TYPE_TAOBAO;
+ }
+
+ List<HotSearch> list = hotSearchService.getHotSearchCache(goodsType,acceptData.getSystem());
+ if (list == null || list.size() == 0) {
+ out.print(JsonUtil.loadFalseResult("娌℃湁鏁版嵁"));
+ return;
+ }
+ List<String> hotSearchList = new ArrayList<String>();
+ if(list!=null)
+ for (HotSearch hot : list)
+ hotSearchList.add(hot.getName());
+
+ JSONObject data = new JSONObject();
+ data.put("count", list.size());
+ data.put("hotSearchList", hotSearchList);
+ data.put("helpLink", configService.getValue(ConfigKeyEnum.newerGonglue.getKey(), SystemInfoUtil.getSystem(acceptData)));
+ out.print(JsonUtil.loadTrueResult(data));
+ }
+
+ /**
+ * 鎼滅储鍊欓�夎瘝
+ *
+ * @param acceptData
+ * @param kw
+ * @param out
+ */
+ @RequestMapping(value = "suggestSearch", method = RequestMethod.POST)
+ public void getSugguestSearch(WXMPAcceptData acceptData, String kw, Integer goodsType, PrintWriter out) {
+ if (goodsType == null) {
+ out.print(JsonUtil.loadFalseResult("骞冲彴绫诲瀷涓嶈兘涓虹┖"));
+ return;
+ }
+
+ List<String> list = null;
+ if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
+ list = TaoBaoUtil.getSuguestSearch(kw);
+ } else if (goodsType == Constant.SOURCE_TYPE_JD) {
+ list = JDUtil.suggestSearch(kw);
+ } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
+ list = PinDuoDuoUtil.suggestSearch(kw);
+ }
+
+ if (list == null || list.size() == 0) {
+ out.print(JsonUtil.loadFalseResult("鏆傛棤寤鸿鍐呭"));
+ return;
+ }
+
+ JSONArray array = new JSONArray();
+ for (String words : list) {
+ array.add(words);
+ }
+ out.print(JsonUtil.loadTrueResult(array));
+ }
+
+ /**
+ * 鎼滅储-鏂扮増
+ *
+ * @param acceptData
+ * @param kw
+ * @param page
+ * @param filter
+ * @param order
+ * 閿�閲忕敱楂樺埌浣�:1 銆� 浠锋牸浠庨珮鍒颁綆:2 銆� 浠锋牸浠庝綆鍒伴珮:3 銆� 鎺ㄥ箍閲忛珮鍒颁綆:4锛堢患鍚堥粯璁わ級銆佽繑鍒╂瘮楂樺埌浣�:5
+ * 銆佽繑鍒╂瘮浣庡埌楂�:6 銆佹帹鑽�20
+ * @param startprice
+ * @param endprice
+ * @param fastFilter
+ * @param out
+ */
+ @RequestMapping(value = "searchGoods")
+ public void searchGoods(WXMPAcceptData acceptData, Integer goodsType, String key, Integer page, String filter,
+ Integer order, Long uid, HttpSession session, PrintWriter out) {
+ if (goodsType == null || goodsType < 2 || goodsType > 3) {
+ out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
+ return;
+ }
+
+ if (StringUtil.isNullOrEmpty(key)) {
+ out.print(JsonUtil.loadFalseResult(1, "璇疯緭鍏ユ悳绱㈠唴瀹�"));
+ return;
+ }
+
+ if (page == null || page < 1) {
+ page = 1;
+ }
+
+ final String searchkey = key.trim();
+ if (searchkey.startsWith("http://") || searchkey.startsWith("https://")) {
+ JSONObject data = new JSONObject();
+ data.put("count", 0);
+ data.put("list", new JSONArray());
+ out.print(JsonUtil.loadTrueResult(data));
+ return;
+ }
+
+ /*--------- 浜笢鍟嗗搧 -------*/
+ if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) {
+ searchJDGoods(acceptData, searchkey, page, filter, order, out);
+ return;
+ }
+
+ /*-------- 鎷煎澶氬晢鍝� -------*/
+ if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
+ searchPDDGoods(acceptData, searchkey, page, filter, order, out);
+ return;
+ }
+ }
+
+ /**
+ * 浜笢
+ *
+ * @param kw
+ * @param page
+ * @param filter
+ * @param order
+ * @param startprice
+ * @param endprice
+ * @return
+ */
+ private void searchJDGoods(WXMPAcceptData acceptData, String key, Integer page, String filter, Integer order,
+ PrintWriter out) {
+ SystemEnum system= SystemInfoUtil.getSystemByWXCXCAppId(acceptData.getAppId());
+ JDSearchResult result = null;
+ boolean hasCoupon = false;
+ String way = configService.getValue(ConfigKeyEnum.jdApiSearchKey.getKey(), system);
+ if ("1".equals(way)) {
+ JDFilter filterAPI = new JDFilter();
+ filterAPI.setKeyword(SearchFilterUtil.filterSearchContent(key));
+ filterAPI.setPageIndex(page);
+ filterAPI.setPageSize(Constant.PAGE_SIZE);
+
+ if (order != null) {
+ int sort = order.intValue();
+ switch (sort) {
+ case 1: // 閿�閲� desc
+ filterAPI.setSort(JDFilter.SORT_DESC);
+ filterAPI.setSortName(JDFilter.SORTNAME_ORDER_COUNT_30DAYS);
+ break;
+ case 2: // 浠锋牸鈥攄esc
+ filterAPI.setSort(JDFilter.SORT_DESC);
+ filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
+ break;
+ case 3: // 浠锋牸鈥攁sc
+ filterAPI.setSort(JDFilter.SORT_ASC);
+ filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
+ break;
+ case 4: // 杩斿埄姣斺�擠ESC
+ filterAPI.setSort(JDFilter.SORT_DESC);
+ filterAPI.setSortName(JDFilter.SORTNAME_COMMISSION_SHARE);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!StringUtil.isNullOrEmpty(filter)) {
+ JSONObject jsonfilter = JSONObject.fromObject(filter);
+ Boolean coupon = jsonfilter.optBoolean("coupon");
+ if (coupon != null && coupon) {
+ hasCoupon = true;
+ filterAPI.setIsCoupon(1); // 鏈夊埜
+ }
+
+ Boolean zy = jsonfilter.optBoolean("zy");
+ if (zy != null && zy) {
+ filterAPI.setOwner("g"); // 鑷惀
+ }
+
+ String minPrice = jsonfilter.optString("minPrice");
+ if (!StringUtil.isNullOrEmpty(minPrice)) {
+ filterAPI.setPricefrom(Double.parseDouble(minPrice));
+ }
+
+ String maxPrice = jsonfilter.optString("maxPrice");
+ if (!StringUtil.isNullOrEmpty(maxPrice)) {
+ filterAPI.setPriceto(Double.parseDouble(maxPrice));
+ }
+ }
+
+ result = JDApiUtil.queryByKey(filterAPI);
+ } else {
+ // 缃戦〉鐖彇
+ JDSearchFilter jdfilter = new JDSearchFilter();
+ jdfilter.setKey(SearchFilterUtil.filterSearchContent(key));
+ jdfilter.setPageNo(page);
+ jdfilter.setPageSize(Constant.PAGE_SIZE);
+
+ if (order != null) {
+ int sort = order.intValue();
+ switch (sort) {
+ case 1: // 閿�閲� desc
+ jdfilter.setSort(JDSearchFilter.SORT_DESC);
+ jdfilter.setSortName(JDSearchFilter.SORTNAME_ORDER_COUNT_30DAYS);
+ break;
+ case 2: // 浠锋牸鈥攄esc
+ jdfilter.setSort(JDSearchFilter.SORT_DESC);
+ jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
+ break;
+ case 3: // 浠锋牸鈥攁sc
+ jdfilter.setSort(JDSearchFilter.SORT_ASC);
+ jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
+ break;
+ case 4: // 杩斿埄姣斺�擠ESC
+ jdfilter.setSort(JDSearchFilter.SORT_DESC);
+ jdfilter.setSortName(JDSearchFilter.SORTNAME_COMMISSION_SHARE);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!StringUtil.isNullOrEmpty(filter)) {
+ JSONObject jsonfilter = JSONObject.fromObject(filter);
+ Boolean coupon = jsonfilter.optBoolean("coupon");
+ if (coupon != null && coupon) {
+ hasCoupon = true;
+ jdfilter.setHasCoupon(1); // 鏈夊埜
+ }
+
+ Boolean zy = jsonfilter.optBoolean("zy");
+ if (zy != null && zy) {
+ jdfilter.setIsZY(1); // 鑷惀
+ }
+
+ Boolean delivery = jsonfilter.optBoolean("delivery");
+ if (delivery != null && delivery) {
+ jdfilter.setDeliveryType(1); // 浜笢閰嶉��
+ }
+
+ String minPrice = jsonfilter.optString("minPrice");
+ if (!StringUtil.isNullOrEmpty(minPrice)) {
+ if (minPrice.contains(".")) {
+ minPrice = minPrice.replace(".", "-");
+ minPrice = minPrice.split("-")[0];
+ }
+ jdfilter.setFromPrice(Integer.parseInt(minPrice));
+ }
+
+ String maxPrice = jsonfilter.optString("maxPrice");
+ if (!StringUtil.isNullOrEmpty(maxPrice)) {
+ if (maxPrice.contains(".")) {
+ maxPrice = maxPrice.replace(".", "-");
+ maxPrice = maxPrice.split("-")[0];
+ }
+ jdfilter.setToPrice(Integer.parseInt(maxPrice));
+ }
+ }
+ result = JDUtil.searchByKey(jdfilter);
+
+ }
+
+ long count = 0;
+ JSONObject data = new JSONObject();
+ JSONArray array = new JSONArray();
+ if (result != null) {
+ PageEntity pageEntity = result.getPageEntity();
+ if (pageEntity != null) {
+ count = pageEntity.getTotalCount();
+ }
+
+ List<JDGoods> goodsList = result.getGoodsList();
+ if (goodsList != null && goodsList.size() > 0) {
+ Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
+ .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
+ GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+ acceptData.getVersion(),acceptData.getSystem());
+ for (JDGoods goods : goodsList) {
+ GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
+ if (hasCoupon) {
+ if (goodsDetailVO.isHasCoupon()) {
+ array.add(gson.toJson(goodsDetailVO));
+ }
+ } else {
+ array.add(gson.toJson(goodsDetailVO));
+ }
+ }
+ }
+ }
+
+ data.put("count", count);
+ data.put("list", array);
+ out.print(JsonUtil.loadTrueResult(data));
+ }
+
+ /**
+ * 鎷煎澶�
+ *
+ * @param kw
+ * @param page
+ * @param filter
+ * @param order
+ * @param startprice
+ * @param endprice
+ * @return
+ */
+ private void searchPDDGoods(WXMPAcceptData acceptData, String key, Integer page, String filter, Integer order,
+ PrintWriter out) {
+ PDDSearchFilter pddfilter = new PDDSearchFilter();
+ pddfilter.setKw(SearchFilterUtil.filterSearchContent(key));
+ pddfilter.setPage(page);
+ pddfilter.setPageSize(Constant.PAGE_SIZE);
+
+ if (order != null) {
+ int sort = order.intValue();
+ switch (sort) {
+ case 1: // 閿�閲� desc
+ pddfilter.setSortType(6);
+ break;
+ case 2: // 浠锋牸鈥攄esc
+ pddfilter.setSortType(4);
+ break;
+ case 3: // 浠锋牸鈥攁sc
+ pddfilter.setSortType(3);
+ break;
+ case 4: // 杩斿埄姣斺�攄esc
+ pddfilter.setSortType(2);
+ break;
+ default: // 缁煎悎鎺掑簭
+ pddfilter.setSortType(0);
+ break;
+ }
+ }
+
+ if (!StringUtil.isNullOrEmpty(filter)) {
+ JSONObject jsonfilter = JSONObject.fromObject(filter);
+ Boolean coupon = jsonfilter.optBoolean("coupon");
+ if (coupon != null && coupon) {
+ pddfilter.setHasCoupon(true); // 鏈夊埜
+ }
+
+ Boolean brand = jsonfilter.optBoolean("brand");
+ if (brand != null && brand) {
+ pddfilter.setIsBrand(true); // 鏄惁鏄搧鐗�
+ }
+ }
+
+ int count = 0;
+ JSONObject data = new JSONObject();
+ JSONArray array = new JSONArray();
+
+ PDDGoodsResult result = null;
+ try {
+ result = PinDuoDuoApiUtil.searchGoods(pddfilter,"437032");
+ } catch (PDDApiException e) {
+ e.printStackTrace();
+ }
+ if (result != null) {
+ count = result.getTotalCount();
+ Gson gson = JsonUtil.getApiCommonGson();
+ List<PDDGoodsDetail> goodsList = result.getGoodsList();
+ if (goodsList != null && goodsList.size() > 0) {
+ GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+ acceptData.getVersion(),acceptData.getSystem());
+
+ for (PDDGoodsDetail goods : goodsList) {
+ GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO);
+ array.add(gson.toJson(goodsDetailVO));
+ }
+ }
+ }
+
+ data.put("count", count);
+ data.put("list", array);
+ out.print(JsonUtil.loadTrueResult(data));
+ }
+}
--
Gitblit v1.8.0