| | |
| | | |
| | | |
| | | import com.ks.lijin.exception.LiJinException; |
| | | import com.ks.lijin.exception.LiJinGoodsException; |
| | | import com.ks.lijin.exception.TaoBaoGoodsDownException; |
| | | import com.ks.lijin.exception.TaoKeApiException; |
| | | import com.ks.lijin.pojo.DTO.taobao.TaoKeAppInfo; |
| | | import com.ks.lijin.pojo.DTO.taobao.TaoLiJinDTO; |
| | | import com.ks.lijin.pojo.DTO.taobao.*; |
| | | import com.ks.lijin.pojo.PageEntity; |
| | | import com.taobao.api.internal.util.StringUtils; |
| | | import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; |
| | | import com.yeshi.goods.facade.entity.taobao.TaoBaoHead; |
| | | import net.sf.json.JSONArray; |
| | | import net.sf.json.JSONObject; |
| | | import org.apache.commons.httpclient.HttpClient; |
| | | import org.apache.commons.httpclient.methods.GetMethod; |
| | | import org.apache.commons.httpclient.params.HttpConnectionManagerParams; |
| | | import org.yeshi.utils.*; |
| | | import org.yeshi.utils.taobao.TbImgUtil; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.net.URLEncoder; |
| | |
| | | // 淘礼金创建 |
| | | public static TaoLiJinDTO createTaoLiJin(Long auctionId, String name, BigDecimal perface, int totalNum, |
| | | Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app) |
| | | throws LiJinException, TaoKeApiException { |
| | | |
| | | throws LiJinException, LiJinGoodsException { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("method", "taobao.tbk.dg.vegas.tlj.create"); |
| | | map.put("adzone_id", app.getPid().split("_")[3]); |
| | |
| | | // TLJLogHelper.info(auctionId, root.toString());// 淘礼金异常信息记录 TODO |
| | | switch (msgCode) { |
| | | case "FAIL_BIZ_ITEM_FORBIDDEN": |
| | | throw new LiJinException(LiJinException.CODE_TLJ_FORBIDDEN, "该商品不支持创建淘礼金红包"); |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品不支持创建淘礼金红包"); |
| | | case "FAIL_BIZ_ACCOUNT_UN_PAID": |
| | | throw new LiJinException(LiJinException.CODE_TLJ_UN_PAID, "您的淘礼金账户暂未创建,请前往资金管理页面充值"); |
| | | case "PRE_FREEZE_ASSET_ACCOUNT_ERROR": |
| | | throw new LiJinException(LiJinException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足"); |
| | | case "ASSET_ACCOUNT_BALANCE_NOT_ENOUGH": |
| | | throw new LiJinException(LiJinException.CODE_TLJ_NO_MONEY, "账户预算不足"); |
| | | case "FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR": |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_NUM_FULL, "今日该商品淘礼金创建数已超上限,请您明日再试"); |
| | | default: |
| | | throw new TaoKeApiException(Integer.parseInt(msgCode), root.toString()); |
| | | throw new LiJinException(Integer.parseInt(msgCode), root.toString()); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | |
| | | public static TaoBaoGoodsBrief searchGoodsDetail(Long id) throws TaoBaoGoodsDownException { |
| | | return searchGoodsDetail(id, null, null); |
| | | } |
| | | |
| | | /** |
| | | * 搜索商品详情-详细 |
| | | * |
| | | * @param id |
| | | * @return |
| | | * @throws |
| | | */ |
| | | public static TaoBaoGoodsBrief searchGoodsDetail(Long id, String specialId, String relationId) throws TaoBaoGoodsDownException { |
| | | TaoBaoGoodsBrief goods = getSimpleGoodsInfo(id); |
| | | if (goods == null) |
| | | return null; |
| | | SearchFilter filter = new SearchFilter(); |
| | | filter.setKey(goods.getTitle()); |
| | | filter.setPage(1); |
| | | filter.setPageSize(50); |
| | | TaoBaoSearchResult result = searchWuLiaoForDetail(goods.getTitle(), goods.getZkPrice(), goods.getProvcity(), |
| | | goods.getUserType(), specialId, relationId); |
| | | if (result != null && result.getTaoBaoGoodsBriefs() != null) |
| | | for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) { |
| | | System.out.println(goods.getAuctionId() + ":" + g.getAuctionId()); |
| | | if (goods.getAuctionId().longValue() == g.getAuctionId()) { |
| | | g.setId(goods.getAuctionId()); |
| | | g.setCreatetime(new Date()); |
| | | g.setMaterialLibType(goods.getMaterialLibType()); |
| | | g.setProvcity(goods.getProvcity()); |
| | | return g; |
| | | } |
| | | } |
| | | goods.setCouponAmount(new BigDecimal("0")); |
| | | goods.setTkMktStatus("1"); |
| | | goods.setTkRate(new BigDecimal("0")); |
| | | goods.setReservePrice(new BigDecimal(0)); |
| | | goods.setTkCommFee(new BigDecimal(0)); |
| | | return goods; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取商品详情,简版 |
| | | * |
| | | * @param id -商品AuctionId |
| | | * @return |
| | | */ |
| | | public static TaoBaoGoodsBrief getSimpleGoodsInfo(Long id) throws TaoBaoGoodsDownException { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("method", "taobao.tbk.item.info.get"); |
| | | map.put("num_iids", id + ""); |
| | | String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true); |
| | | System.out.println(resultStr); |
| | | JSONObject data = JSONObject.fromObject(resultStr); |
| | | // 商品下架 |
| | | if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 15 |
| | | && data.optJSONObject("error_response").optInt("sub_code") == 50001) { |
| | | throw new TaoBaoGoodsDownException(data.optJSONObject("error_response").optInt("code"), "商品下架"); |
| | | } |
| | | |
| | | if (data.optJSONObject("tbk_item_info_get_response") == null) |
| | | return null; |
| | | JSONArray array = data.optJSONObject("tbk_item_info_get_response").optJSONObject("results") |
| | | .optJSONArray("n_tbk_item"); |
| | | if (array != null && array.size() > 0) { |
| | | JSONObject item = array.optJSONObject(0); |
| | | return parseSimpleGoodsInfo(item); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | private static TaoBaoGoodsBrief parseSimpleGoodsInfo(JSONObject item) { |
| | | TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief(); |
| | | goods.setAuctionId(item.optLong("num_iid")); |
| | | goods.setAuctionUrl(item.optString("item_url")); |
| | | goods.setBiz30day(item.optInt("volume")); |
| | | if (item.optJSONObject("small_images") != null) { |
| | | JSONArray imgArray = item.optJSONObject("small_images").optJSONArray("string"); |
| | | if (imgArray != null) { |
| | | List<String> imgList = new ArrayList<>(); |
| | | for (int n = 0; n < imgArray.size(); n++) { |
| | | imgList.add(imgArray.optString(n)); |
| | | } |
| | | goods.setImgList(imgList); |
| | | } |
| | | } |
| | | goods.setTitle(item.optString("title")); |
| | | goods.setUserType(item.optInt("user_type")); |
| | | goods.setZkPrice(new BigDecimal(item.optString("zk_final_price"))); |
| | | goods.setReservePrice(new BigDecimal(item.optString("zk_final_price"))); |
| | | goods.setAuctionUrl(item.optString("item_url")); |
| | | goods.setProvcity(item.optString("provcity")); |
| | | goods.setPictUrl(item.optString("pict_url")); |
| | | goods.setShopTitle(item.optString("nick")); |
| | | goods.setSellerId(item.optLong("seller_id")); |
| | | goods.setRootCategoryName(item.optString("cat_name")); |
| | | goods.setLeafName(item.optString("cat_leaf_name")); |
| | | |
| | | String optString = item.optString("shop_dsr"); |
| | | if (!StringUtil.isNullOrEmpty(optString)) { |
| | | goods.setShopDsr(new Integer(optString)); |
| | | } |
| | | |
| | | String ratesum = item.optString("ratesum"); |
| | | if (!StringUtil.isNullOrEmpty(ratesum)) { |
| | | goods.setRatesum(new Integer(ratesum)); |
| | | } |
| | | |
| | | if (item.optBoolean("is_prepay")) |
| | | goods.setIsPrepay(1); |
| | | |
| | | if (item.optBoolean("i_rfd_rate")) |
| | | goods.setRfdRate(1); |
| | | |
| | | if (item.optBoolean("h_good_rate")) |
| | | goods.setGoodRate(1); |
| | | |
| | | if (item.optBoolean("h_pay_rate30")) |
| | | goods.setPayRate30(1); |
| | | |
| | | if (item.optBoolean("free_shipment")) |
| | | goods.setFreeShipment(1); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(item.optString("material_lib_type"))) { |
| | | try { |
| | | String materialLibType = item.optString("material_lib_type"); |
| | | goods.setMaterialLibType(Integer.parseInt(materialLibType.split(",")[0])); |
| | | } catch (Exception e) { |
| | | goods.setMaterialLibType(0); |
| | | } |
| | | |
| | | } else |
| | | goods.setMaterialLibType(0); |
| | | |
| | | goods.setRootCategoryName(item.optString("cat_name")); |
| | | goods.setLeafName(item.optString("cat_leaf_name")); |
| | | |
| | | goods = loadYuShouInfo(goods, item); |
| | | return goods; |
| | | } |
| | | |
| | | private static TaoBaoGoodsBrief loadYuShouInfo(TaoBaoGoodsBrief goods, JSONObject item) { |
| | | if (goods != null && item != null) { |
| | | // 预售相关解析 |
| | | goods.setYsylClickUrl(item.optString("ysyl_click_url")); |
| | | if (!StringUtil.isNullOrEmpty(item.optString("ysyl_commission_rate"))) |
| | | goods.setYsylCommissionRate(new BigDecimal(item.optString("ysyl_commission_rate"))); |
| | | goods.setYsylTljFace(item.optString("ysyl_tlj_face")); |
| | | goods.setYsylTljSendTime(item.optString("ysyl_tlj_send_time")); |
| | | goods.setYsylTljUseEndTime(item.optString("ysyl_tlj_use_end_time")); |
| | | goods.setYsylTljUseStartTime(item.optString("ysyl_tlj_use_start_time")); |
| | | |
| | | goods.setPresaleDeposit(item.optString("presale_deposit")); |
| | | goods.setPresaleDiscountFeeText(item.optString("presale_discount_fee_text")); |
| | | goods.setPresaleEndTime(item.optString("presale_end_time")); |
| | | goods.setPresaleStartTime(item.optString("presale_start_time")); |
| | | goods.setPresaleTailEndTime(item.optString("presale_tail_end_time")); |
| | | goods.setPresaleTailStartTime(item.optString("presale_tail_start_time")); |
| | | |
| | | return goods; |
| | | } |
| | | return goods; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 商品物料搜索 |
| | | * |
| | | * @param title |
| | | * @param zkPrice |
| | | * @param provcity |
| | | * @param userType |
| | | * @param specialId |
| | | * @param relationId |
| | | * @return |
| | | */ |
| | | public static TaoBaoSearchResult searchWuLiaoForDetail(String title, BigDecimal zkPrice, String provcity, |
| | | int userType, String specialId, String relationId) { |
| | | if (provcity.trim().contains(" ")) |
| | | provcity = provcity.split(" ")[provcity.split(" ").length - 1]; |
| | | TaoBaoSearchResult taoBaoSearchResult = new TaoBaoSearchResult(); |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("method", "taobao.tbk.dg.material.optional"); |
| | | map.put("page_size", 50 + ""); |
| | | map.put("page_no", 1 + ""); |
| | | map.put("start_price", (int) zkPrice.subtract(new BigDecimal(1)).doubleValue() + ""); |
| | | map.put("end_price", (int) zkPrice.add(new BigDecimal(1)).doubleValue() + ""); |
| | | map.put("is_tmall", (userType == 1) + ""); |
| | | map.put("q", title); |
| | | map.put("itemloc", provcity); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(specialId) && !StringUtil.isNullOrEmpty(relationId)) { |
| | | map.put("special_id", specialId); |
| | | } else if (!StringUtil.isNullOrEmpty(specialId)) { |
| | | map.put("special_id", specialId); |
| | | } else if (!StringUtil.isNullOrEmpty(relationId)) { |
| | | map.put("relation_id", relationId); |
| | | } |
| | | |
| | | String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true); |
| | | System.out.println(resultStr); |
| | | JSONObject data = JSONObject.fromObject(resultStr); |
| | | if (data.optJSONObject("tbk_dg_material_optional_response") != null |
| | | && data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list") != null) { |
| | | JSONArray array = data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list") |
| | | .optJSONArray("map_data"); |
| | | List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); |
| | | if (array != null) { |
| | | for (int i = 0; i < array.size(); i++) { |
| | | TaoBaoGoodsBrief goods = parseWuLiaoItem(array.optJSONObject(i)); |
| | | if (goods != null) |
| | | goodsList.add(goods); |
| | | } |
| | | } |
| | | taoBaoSearchResult.setTaoBaoGoodsBriefs(goodsList); |
| | | } |
| | | |
| | | List<TaoBaoSearchNav> navList = new ArrayList<>(); |
| | | |
| | | TaoBaoHead taoBaoHead = new TaoBaoHead(); |
| | | taoBaoHead.setDocsfound(1000); |
| | | taoBaoSearchResult.setTaoBaoHead(taoBaoHead); |
| | | taoBaoSearchResult.setPageEntity(new PageEntity()); |
| | | |
| | | taoBaoSearchResult.setNavList(navList); |
| | | |
| | | return taoBaoSearchResult; |
| | | } |
| | | |
| | | |
| | | // 解析物料 |
| | | private static TaoBaoGoodsBrief parseWuLiaoItem(JSONObject item) { |
| | | TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief(); |
| | | goods.setPictUrl(item.optString("pict_url")); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(item.optString("white_image"))) { |
| | | goods.setPictUrlWhite(item.optString("white_image")); |
| | | } |
| | | |
| | | goods.setAuctionId(item.optLong("num_iid")); |
| | | goods.setAuctionUrl("https:" + item.optString("url")); |
| | | goods.setBiz30day(item.optInt("volume")); |
| | | goods.setCouponInfo(item.optString("coupon_info")); |
| | | |
| | | if (goods.getCouponInfo() != null) |
| | | goods.setCouponInfo(goods.getCouponInfo().replace(".00", "")); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(goods.getCouponInfo())) { |
| | | List<BigDecimal> quanInfo = TaoBaoCouponUtil.getCouponInfo(goods.getCouponInfo()); |
| | | goods.setCouponAmount(quanInfo.get(1)); |
| | | goods.setCouponEffectiveEndTime(item.optString("coupon_end_time")); |
| | | goods.setCouponEffectiveStartTime(item.optString("coupon_start_time")); |
| | | goods.setCouponStartFee(new BigDecimal(item.optString("coupon_start_fee"))); |
| | | goods.setCouponLeftCount(item.optInt("coupon_remain_count")); |
| | | goods.setCouponLink("https:" + item.optString("coupon_share_url")); |
| | | goods.setCouponTotalCount(item.optInt("coupon_total_count")); |
| | | goods.setCouponActivityId(item.optString("coupon_id")); |
| | | } else { |
| | | goods.setCouponAmount(new BigDecimal(0)); |
| | | } |
| | | |
| | | goods.setDayLeft(-1); |
| | | if (item.optJSONObject("small_images") != null) { |
| | | JSONArray imgArray = item.optJSONObject("small_images").optJSONArray("string"); |
| | | if (imgArray != null) { |
| | | List<String> imgList = new ArrayList<>(); |
| | | for (int n = 0; n < imgArray.size(); n++) { |
| | | imgList.add(imgArray.optString(n)); |
| | | } |
| | | goods.setImgList(imgList); |
| | | } |
| | | } |
| | | |
| | | if (item.optBoolean("include_mkt")) |
| | | goods.setTkMktStatus("1"); |
| | | else |
| | | goods.setTkMktStatus("0"); |
| | | |
| | | if (item.optBoolean("include_dxjh")) |
| | | goods.setIncludeDxjh(1); |
| | | |
| | | goods.setSellerId(item.optLong("seller_id")); |
| | | goods.setShopTitle(item.optString("shop_title")); |
| | | goods.setTitle(item.optString("title")); |
| | | goods.setProvcity(item.optString("provcity")); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(item.optString("level_one_category_id"))) { |
| | | goods.setRootCatId(item.optInt("level_one_category_id")); |
| | | } |
| | | goods.setRootCategoryName(item.optString("level_one_category_name")); |
| | | |
| | | if (!StringUtil.isNullOrEmpty(item.optString("category_id"))) { |
| | | goods.setLeafCatId(item.optInt("category_id")); |
| | | } |
| | | goods.setLeafName(item.optString("category_name")); |
| | | |
| | | goods.setTkRate(new BigDecimal(item.optString("commission_rate")).divide(new BigDecimal(100))); |
| | | goods.setTotalNum(1000); |
| | | goods.setUserType(item.optInt("user_type")); |
| | | goods.setUserTypeName(""); |
| | | goods.setZkPrice(new BigDecimal(item.optString("zk_final_price"))); |
| | | |
| | | if (item.optBoolean("include_dxjh")) { |
| | | goods.setDxjhInfo(item.optString("info_dxjh")); |
| | | } |
| | | |
| | | if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {// 无券 |
| | | goods.setTkCommFee(goods.getZkPrice().multiply(goods.getTkRate()).divide(new BigDecimal(100))); |
| | | } else if (goods.getZkPrice().compareTo(goods.getCouponStartFee()) >= 0// 有券 |
| | | && goods.getZkPrice().compareTo(goods.getCouponAmount()) >= 0) { |
| | | BigDecimal finalPrice = goods.getZkPrice().subtract(goods.getCouponAmount()); |
| | | goods.setTkCommFee(finalPrice.multiply(goods.getTkRate()).divide(new BigDecimal(100))); |
| | | } else { |
| | | goods.setTkCommFee(new BigDecimal(0)); |
| | | } |
| | | if (!StringUtil.isNullOrEmpty(item.optString("reserve_price"))) |
| | | goods.setReservePrice(new BigDecimal(item.optString("reserve_price"))); |
| | | goods.setTotalFee(new BigDecimal("0")); |
| | | // 推荐语 |
| | | goods.setDescription(item.optString("item_description")); |
| | | |
| | | goods = loadYuShouInfo(goods, item); |
| | | return goods; |
| | | } |
| | | |
| | | } |
| | | |
| | | |