package com.yeshi.fanli.controller.client.v2; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.springframework.cache.annotation.Cacheable; 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.common.CommonContentNav; import com.yeshi.fanli.dto.common.CommonContentResult; import com.yeshi.fanli.dto.common.CommonContentTypeEnum; import com.yeshi.fanli.dto.common.JDCommonContentTypeEnum; import com.yeshi.fanli.dto.common.PDDCommonContentTypeEnum; 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.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture; import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.service.inter.goods.CommonTemplateContentService; import com.yeshi.fanli.service.inter.goods.JDCommonTemplateContentService; import com.yeshi.fanli.service.inter.goods.PDDCommonTemplateContentService; import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.goods.GoodsDetailVO; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 通用模板 * * @author Administrator * */ @Controller @RequestMapping("api/v2/commoncontent") public class CommonContentControllerV2 { @Resource private SwiperPictureService swiperPictureService; @Resource private HongBaoManageService hongBaoManageService; @Resource private CommonTemplateContentService commonTemplateContentService; @Resource private JDCommonTemplateContentService jdCommonTemplateContentService; @Resource private PDDCommonTemplateContentService pddCommonTemplateContentService; /** * 通用模板导航 * * @param acceptData * @param key * @param out */ @RequestMapping(value = "getNavList", method = RequestMethod.POST) public void getNavList(AcceptData acceptData, String key, Integer type, PrintWriter out) { if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseResult(1, "请传入Key")); return; } List list = null; if (type == null || type == Constant.SOURCE_TYPE_TAOBAO) { list = commonTemplateContentService.getNavList(CommonContentTypeEnum.valueOf(key)); } else if (type == Constant.SOURCE_TYPE_JD) { // 暂无分类 } else if (type == Constant.SOURCE_TYPE_PDD) { list = pddCommonTemplateContentService.getNavList(PDDCommonContentTypeEnum.valueOf(key)); } if (list == null) { list = new ArrayList(); } out.print(JsonUtil.loadTrueResult(new Gson().toJson(list))); } /** * 获取内容 * * @param acceptData * @param key * @param page-页码 * @param navId-导航ID * @param out */ @RequestMapping(value = "getNavGoodsList", method = RequestMethod.POST) public void getNavContent(AcceptData acceptData, String key, Integer type, Integer page, String cid, PrintWriter out) { if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseResult(1, "请传入Key")); return; } if (page == null || page < 1) { out.print(JsonUtil.loadFalseResult(1, "请传入正确的page")); return; } if (type == null || type == Constant.SOURCE_TYPE_TAOBAO) { getListTB(acceptData, key, page, cid, out); return; } if (type == Constant.SOURCE_TYPE_JD) { getListJD(acceptData, key, page, cid, out); return; } if (type == Constant.SOURCE_TYPE_PDD) { getListPDD(acceptData, key, page, cid, out); return; } out.print(JsonUtil.loadFalseResult("goodsType参数不正确")); } private void getListTB(AcceptData acceptData, String key, Integer page, String cid, PrintWriter out) { CommonContentResult result = null; CommonContentTypeEnum type = CommonContentTypeEnum.valueOf(key); if (type == CommonContentTypeEnum.guessLikeDevice) { // 猜你喜欢 String idfa = acceptData.getIdfa(); String imei = acceptData.getImei(); result = guessLikeDeviceTB(idfa, imei, page); } else { // 大淘客页码只能为10,50,100,200 result = commonTemplateContentService.getContentList(type, cid, page, 10); } JSONObject root = new JSONObject(); if (page == 1) { // 保留暂时不开启,待后续开启 List bannerList = new ArrayList<>(); root.put("bannerList", new Gson().toJson(bannerList)); } JSONArray array = new JSONArray(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); List goodsList = result.getGoodsList(); BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); for (TaoBaoGoodsBrief taoBaoGoodsBrief : goodsList) { GoodsDetailVO vo = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, paramsDTO); if (type == CommonContentTypeEnum.mianDan)// 免单商品 { vo.getMoneyInfo().setFanliMoney("¥" + TaoBaoUtil.getAfterUseCouplePrice(taoBaoGoodsBrief)); vo.getMoneyInfo().setShareMoney("¥" + TaoBaoUtil.getAfterUseCouplePrice(taoBaoGoodsBrief)); } array.add(gson.toJson(vo)); } root.put("list", array); root.put("count", result.getCount()); out.print(JsonUtil.loadTrueResult(root)); } /** * 京东通用专题模板 * * @param acceptData * @param key * @param page * @param cid * @param out */ public void getListJD(AcceptData acceptData, String key, Integer page, String cid, PrintWriter out) { JSONObject data = new JSONObject(); if (page == 1) { List bannerList = new ArrayList<>(); data.put("bannerList", new Gson().toJson(bannerList)); } JDSearchResult result = jdCommonTemplateContentService.getContentList(JDCommonContentTypeEnum.valueOf(key), cid, page, Constant.PAGE_SIZE); JSONArray array = new JSONArray(); long count = 0; if (result != null) { PageEntity pageEntity = result.getPageEntity(); if (pageEntity != null) { count = pageEntity.getTotalCount(); } List goodsList = result.getGoodsList(); if (goodsList != null && goodsList.size() > 0) { BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); for (JDGoods goods : goodsList) { array.add(gson.toJson(GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO))); } } } data.put("list", array); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } /** * 拼多多通用专题模板 * * @param acceptData * @param key * @param page * @param cid * @param out */ public void getListPDD(AcceptData acceptData, String key, Integer page, String cid, PrintWriter out) { JSONObject data = new JSONObject(); if (page == 1) { // 2、顶部轮播图 List bannerList = null; if (Constant.IS_TEST) { bannerList = swiperPictureService.getByBannerCard("index_top"); } if (bannerList == null) { bannerList = new ArrayList(); } data.put("bannerList", new Gson().toJson(bannerList)); } PDDGoodsResult result = pddCommonTemplateContentService.getContentList(PDDCommonContentTypeEnum.valueOf(key), cid, page, Constant.PAGE_SIZE); JSONArray array = new JSONArray(); long count = 0; if (result != null) { count = result.getTotalCount(); List goodsList = result.getGoodsList(); if (goodsList != null && goodsList.size() > 0) { BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); for (PDDGoodsDetail goods : goodsList) { array.add(gson.toJson(GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO))); } } } data.put("list", array); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } /** * 猜你喜欢-淘宝设备推荐 * * @param acceptData * @param page * @return */ @Cacheable(value = "commonContentCache", key = "#idfa+'-'+#imei+'-'+#page") private CommonContentResult guessLikeDeviceTB(String idfa, String imei, Integer page) { TaoBaoSearchResult searchResult = TaoKeApiUtil.guessDeviceLike(page, Constant.PAGE_SIZE, imei, idfa); if (searchResult != null && searchResult.getTaoBaoGoodsBriefs() != null && searchResult.getTaoBaoGoodsBriefs().size() > 0) { CommonContentResult result = new CommonContentResult(); result.setCount(searchResult.getPageEntity().getTotalCount()); result.setGoodsList(searchResult.getTaoBaoGoodsBriefs()); return result; } return null; } }