package com.yeshi.fanli.controller.web; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; 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 org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.lable.QualityFactory; import com.yeshi.fanli.entity.bus.search.HotSearch; import com.yeshi.fanli.entity.bus.su.search.SuperHotSearch; import com.yeshi.fanli.entity.system.CustomerContent; import com.yeshi.fanli.entity.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoSearchNav; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.service.inter.config.CustomerContentService; import com.yeshi.fanli.service.inter.config.SuperHotSearchService; import com.yeshi.fanli.service.inter.config.SystemClientParamsService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.lable.QualityGoodsService; import com.yeshi.fanli.service.inter.user.HistorySearchService; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("api/web/v1/webSearch") public class WebSearchController { @Resource private HistorySearchService historySearchService; @Resource private WebControllerUtil webControllerUtil; @Resource private HongBaoManageService manageService; @Resource private SystemClientParamsService systemClientParamsService; @Resource private SuperHotSearchService superHotSearchSerivce; @Resource private CustomerContentService customerContentService; @Resource private QualityGoodsService qualityGoodsService; // 优惠券 /* * public final static int quanType = 1; * * public final static int baoyou = 2; * * public final static int TMALL = 3; */ /** * * 方法说明: 关键字提示建议搜索 * * @author mawurui createTime 2018年4月25日 下午3:04:52 * @param acceptData * @param kw * @param out */ @RequestMapping(value = "suggestsearch", method = RequestMethod.GET) public void getSugguestSearch(String callback, AcceptData acceptData, String kw, PrintWriter out) { List list = TaoBaoUtil.getSuguestSearch(kw); if (list != null && list.size() > 0) { JSONArray array = new JSONArray(); int num = 0; for (String st : list) { array.add(st); num = num + 1; if (num >= 5) { break; } } out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(array))); } else { out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(""))); } return; } /** * * 方法说明: 搜索 * * @author mawurui createTime 2018年5月3日 上午9:53:54 * @param acceptData * @param kw * @param page * @param filter * @param order * @param startprice * @param endprice * @param fastFilter * @param out */ @RequestMapping(value = "search", method = RequestMethod.GET) public void search(String callback, AcceptData acceptData, String kw, int page, String filter, String order, String startprice, String endprice, String fastFilter, PrintWriter out) { if (!StringUtil.isNullOrEmpty(fastFilter)) { if (!StringUtil.isNullOrEmpty(filter)) { JSONArray filterArray = JSONArray.fromObject(filter); JSONArray fastFilterArray = JSONArray.fromObject(fastFilter); filterArray.addAll(fastFilterArray); filter = filterArray.toString(); } else { filter = fastFilter; } } JSONObject data = search(kw, page, filter, order, startprice, endprice); out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); } @RequestMapping(value = "searchGoods", method = RequestMethod.GET) public void searchGoods(String callback, AcceptData acceptData, String kw, int page, int pagesize, String filters, String rate, String order, String startprice, String endprice, PrintWriter out) { /* * System system = webControllerUtil.getSystem(acceptData); if(system == * null){ * out.print(JsonUtil.loadFalseResult(WebControllerUtil.NOSYSTEM)); * return; } */ if (pagesize > 100) return; SearchFilter sf = new SearchFilter(); sf.setPage(page); sf.setPageSize(pagesize); sf.setKey(StringUtil.isNullOrEmpty(kw) ? "" : kw); boolean recommend = false; if (!StringUtil.isNullOrEmpty(filters)) { JSONArray array = JSONArray.fromObject(filters); for (int i = 0; i < array.size(); i++) { String type = array.optJSONObject(i).optString("type"); if ("quantype".equalsIgnoreCase(type)) { sf.setQuan(1); } else if ("baoyou".equalsIgnoreCase(type)) { sf.setBaoYou(true); } else if ("usertype".equalsIgnoreCase(type)) { sf.setTmall(true); } else if ("recommend".equalsIgnoreCase(type)) { // recommend = true; } } } if (!StringUtil.isNullOrEmpty(startprice)) sf.setStartPrice(new BigDecimal(startprice)); if (!StringUtil.isNullOrEmpty(endprice)) sf.setEndPrice(new BigDecimal(endprice)); if (!StringUtil.isNullOrEmpty(rate)) try { sf.setStartTkRate(Integer.parseInt(rate)); } catch (Exception e) { } if (!StringUtil.isNullOrEmpty(order)) if (Integer.parseInt(order) == 0) sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); else if (Integer.parseInt(order) == 2) sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH); else if (Integer.parseInt(order) == 3) sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW); else if (Integer.parseInt(order) == 4) sf.setSort(TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW); if (StringUtil.isNullOrEmpty(kw)) recommend = true; List listExtra = new ArrayList(); long count = 0; if (recommend) { List listQuery = qualityGoodsService.listRecommendBykey((page - 1) * pagesize, pagesize, kw, sf.getQuan() == 1 ? 1 : 0, sf.isTmall() ? 1 : 0, StringUtil.isNullOrEmpty(startprice) ? null : Double.parseDouble(startprice), StringUtil.isNullOrEmpty(endprice) ? null : Double.parseDouble(endprice), StringUtil.isNullOrEmpty(rate) ? null : Double.parseDouble(rate), null, 1); BigDecimal proportion = manageService.getFanLiRate(); /* 遍历列表数据 */ if (listQuery != null && listQuery.size() > 0) { for (QualityFactory selectionGoods : listQuery) { TaoBaoGoodsBrief taoBaoGoodsBrief = selectionGoods.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } int biz30day = taoBaoGoodsBrief.getBiz30day(); if (biz30day >= 10000) { double sales = biz30day; String salesCountMidea = String.format("%.1f", sales / 10000); taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万"); } else { taoBaoGoodsBrief.setSalesCount(biz30day + ""); } // 改变图片尺寸 String pictUrl = taoBaoGoodsBrief.getPictUrl(); if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) { taoBaoGoodsBrief.setPictUrl(TbImgUtil.getTBSize320Img(pictUrl)); } listExtra.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null)); } } count = qualityGoodsService.countRecommendBykey(kw, sf.getQuan() == 1 ? 1 : 0, sf.isTmall() ? 1 : 0, StringUtil.isNullOrEmpty(startprice) ? null : Double.parseDouble(startprice), StringUtil.isNullOrEmpty(endprice) ? null : Double.parseDouble(endprice), StringUtil.isNullOrEmpty(rate) ? null : Double.parseDouble(rate), null); } else { TaoBaoSearchResult result = TaoBaoUtil.search(sf); if (result != null) { List taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs(); int fq = sf.getQuan(); int fh = sf.getHongbao(); boolean ft = sf.isTmall(); BigDecimal proportion = manageService.getFanLiRate(); if (fq == 0 && fh == 0 && !ft) { if (taoBaoGoodsBriefs != null) for (TaoBaoGoodsBrief bf : taoBaoGoodsBriefs) { listExtra.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(bf, proportion.toString(), "")); } } else { TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra; if (taoBaoGoodsBriefs != null) for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) { taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), ""); listExtra.add(taoBaoGoodsBriefExtra); } } count = result.getTaoBaoHead().getDocsfound(); } } JSONObject data = new JSONObject(); Gson gson2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); data.put("result", gson2.toJson(listExtra)); data.put("count", count); out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); } private JSONObject search(String kw, int page, String filter, String order, String startprice, String endprice) { SearchFilter sf = new SearchFilter(); sf.setKey(kw); sf.setPage(page); sf.setSort(0); if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(startprice)) { sf.setStartPrice(new BigDecimal(startprice)); } if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(endprice)) { sf.setEndPrice(new BigDecimal(endprice)); } if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(order)) { if (Integer.parseInt(order) == 0) { // 销量 sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); } else if (Integer.parseInt(order) == 3) { sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW); } else if (Integer.parseInt(order) == 2) { sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH); } else if (Integer.parseInt(order) == 1) { } } /* * else{ //默认销量从高到低排序 sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); } */ if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(filter)) { // 查询淘宝天猫 if (Integer.parseInt(filter) == 1) { filter = "[{\"type\": \"quantype\"}]"; } else if (Integer.parseInt(filter) == 2) { filter = "[{\"type\": \"baoyou\"}]"; } else if (Integer.parseInt(filter) == 3) { filter = "[{\"type\": \"userType\"}]"; } else { filter = "[]"; } JSONArray array = JSONArray.fromObject(filter); Set params = new HashSet(); for (int i = 0; i < array.size(); i++) { String ty = array.optJSONObject(i).optString("type"); if ("shoptype".equalsIgnoreCase(ty)) { if (array.optJSONObject(i).optInt("id") == 21) { sf.setTmFlagship(false); // 不筛�? } else { sf.setTmFlagship(true); sf.setTmall(true); sf.setShopTag("b2c"); } } else if ("category".equalsIgnoreCase(ty)) { sf.setCateIds(array.optJSONObject(i).optString("id")); } else if ("userType".equalsIgnoreCase(ty)) { // if(array.optJSONObject(i).optInt("id") == 51) sf.setTmall(true); // else // sf.setTmall(false); } else if ("baoyou".equalsIgnoreCase(ty)) { // if(array.optJSONObject(i).optInt("id") == 61) sf.setBaoYou(true); // else // sf.setBaoYou(false); } else if ("quantype".equalsIgnoreCase(ty)) { // if (array.optJSONObject(i).optInt("id") == 31){ sf.setQuan(1); if (sf.isTmFlagship()) { sf.setShopTag(sf.getShopTag() + ",dpyhq"); } else { sf.setShopTag("dpyhq"); } // } // else // sf.setQuan(2); } else if ("hongbaotype".equalsIgnoreCase(ty)) { if (array.optJSONObject(i).optInt("id") == 41)// 有红�? sf.setHongbao(1); else// 无红�? sf.setHongbao(2); } else if ("property".equalsIgnoreCase(ty)) { String pid = (String) array.optJSONObject(i).opt("pid"); String id = (String) array.optJSONObject(i).opt("id"); boolean flag = false; String str = null; for (String string : params) { flag = string.contains(pid + ":"); if (flag) { str = string; break; } } if (flag) { params.add(str + "," + id); params.remove(str); } else { params.add(pid + ":" + id); } } } sf.setParams(params); } TaoBaoSearchResult result = TaoBaoUtil.search(sf); List navList = TaoBaoUtil.getBaseNav(); if (result.getNavList() != null) navList.addAll(result.getNavList()); Gson gson = new GsonBuilder().create(); JSONObject data = new JSONObject(); data.put("nav", gson.toJson(navList)); List re = new ArrayList(); List taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs(); int fq = sf.getQuan(); int fh = sf.getHongbao(); boolean ft = sf.isTmall(); Map map = manageService.convertMap(); BigDecimal proportion = manageService.getFanLiRate(); if (fq == 0 && fh == 0 && !ft) { for (TaoBaoGoodsBrief bf : result.getTaoBaoGoodsBriefs()) { re.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(bf, proportion.toString(), "")); } } else { TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra; for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) { taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), ""); re.add(taoBaoGoodsBriefExtra); } } Gson gson2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); data.put("result", gson2.toJson(re)); data.put("count", result.getTaoBaoHead().getDocsfound()); return data; } /** * * 方法说明: 联系客服接口 * * @author mawurui createTime 2018年4月10日 上午9:02:41 */ @RequestMapping(value = "contactCustomer", method = RequestMethod.GET) public void contactCustomerService(PrintWriter out) { String title = "联系客服"; List contentList = customerContentService.contactCustomerService(title); JSONObject data = new JSONObject(); data.put("contentList", JsonUtil.getSimpleGsonWithDate().toJson(contentList)); out.print(JsonUtil.loadTrueResult(data)); } /** * * 方法说明: 热门搜索 * * @author mawurui createTime 2018年5月11日 下午4:32:46 * @param acceptData * @param out */ @RequestMapping(value = "getHotSearch", method = RequestMethod.GET) public void getHotSearch(AcceptData acceptData, String callback, PrintWriter out) { /* * System system = xcxMiniControllerUtil.getSystem(acceptData); if * (system == null) { * out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.NOSYSTEM)); * return; } */ List superHotSearchList = superHotSearchSerivce.getSuperHotSearchBySystemId(4); // 返利券app if (superHotSearchList == null || superHotSearchList.size() == 0) { out.print(JsonUtil.loadFalseResult(WebControllerUtil.NODATA)); return; } List hotSearchList = new ArrayList(); for (SuperHotSearch superHotSearch : superHotSearchList) { HotSearch hotSearch = superHotSearch.getHotSearch(); hotSearchList.add(hotSearch); } JSONObject data = new JSONObject(); data.put("count", hotSearchList.size()); data.put("hotSearchList", hotSearchList); String result = JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)); out.print(result); return; } }