From a7454d8a6325566753358b37ffabfae2faa0ca7f Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 28 四月 2021 19:46:49 +0800 Subject: [PATCH] 拼多多授权调整,支持小程序跳转 --- 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 75f7de7..15fba37 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())))); - 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); - 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()); - 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()); - - 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.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.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(); + 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 = 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) { + 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)); + } +} -- Gitblit v1.8.0