yujian
2019-11-25 aa552facf6d833acab0d3e3e29bda2a0fb826ffe
fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
@@ -8,6 +8,8 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -330,11 +332,13 @@
         BigDecimal finalPriceDecimal = new BigDecimal(json.optString("finalPrice"));
         if (finalPriceDecimal != null && json.optString("hasCoupon") != null && json.optInt("hasCoupon") == 1
               && json.optInt("couponRemainCnt") > 0) {
            List<JDCouponInfo> couponList = new ArrayList<>();
            JDCouponInfo coupon = new JDCouponInfo();
            coupon.setDiscount(new BigDecimal(json.optString("couponDiscount")));
            coupon.setQuota(new BigDecimal(json.optString("couponQuota")));
            coupon.setLink("https:" + json.optString("couponLink"));
            goods.setCouponInfo(coupon);
            couponList.add(coupon);
            goods.setCouponInfoList(couponList);
         }
      }
@@ -364,7 +368,7 @@
         price = pinGouInfo.getPingouPrice();
      }
      JDCouponInfo couponInfo = goods.getCouponInfo();
      JDCouponInfo couponInfo = getShowCouponInfo(goods.getCouponInfoList(), price);
      if (couponInfo == null) {
         money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil
               .mul(MoneyBigDecimalUtil.mul(price, commissionInfo.getCommissionShare()), new BigDecimal("0.01")),
@@ -390,7 +394,6 @@
      return BigDecimalUtil.getWithNoZera(MoneyBigDecimalUtil.mul(money, new BigDecimal("0.9")));
   }
   /**
    * 商品佣金计算
    * 
@@ -404,8 +407,6 @@
      if (commissionPlus == null) {
         return money;
      }
      BigDecimal price = null;
      JDPingouInfo pinGouInfo = goods.getPinGouInfo();
@@ -415,10 +416,10 @@
         price = pinGouInfo.getPingouPrice();
      }
      JDCouponInfo couponInfo = goods.getCouponInfo();
      JDCouponInfo couponInfo = getShowCouponInfo(goods.getCouponInfoList(), price);
      if (couponInfo == null) {
         money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil
               .mul(MoneyBigDecimalUtil.mul(price, commissionPlus), new BigDecimal("0.01")),
         money = MoneyBigDecimalUtil.mul(
               MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(price, commissionPlus), new BigDecimal("0.01")),
               MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
      } else {
         BigDecimal quota = couponInfo.getQuota();
@@ -426,21 +427,20 @@
         if (quota.compareTo(price) <= 0 && price.compareTo(discount) > 0) {
            BigDecimal finalPrice = price.subtract(discount);
            money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(
                  MoneyBigDecimalUtil.mul(finalPrice, commissionPlus),
                  new BigDecimal("0.01")), MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
            money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil
                  .mul(MoneyBigDecimalUtil.mul(finalPrice, commissionPlus), new BigDecimal("0.01")),
                  MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
         } else {// 不能用券
            money = MoneyBigDecimalUtil.mul(
                  MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(price,commissionPlus),
                        new BigDecimal("0.01")),
                  MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(price, commissionPlus), new BigDecimal("0.01")),
                  MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
         }
      }
      // 返利比例为原来的90%
      return BigDecimalUtil.getWithNoZera(MoneyBigDecimalUtil.mul(money, new BigDecimal("0.9")));
   }
   /**
    * 计算商品券后价,没有券则返回原价
    * 
@@ -448,12 +448,6 @@
    * @return
    */
   public static BigDecimal getQuanPrice(JDGoods jdGoods) {
      JDCouponInfo couponInfo = jdGoods.getCouponInfo();
      if (couponInfo == null) {
         return jdGoods.getPrice();
      }
      BigDecimal discount = couponInfo.getDiscount();
      BigDecimal price = null;
      JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo();
      if (pinGouInfo == null) {
@@ -461,6 +455,12 @@
      } else {
         price = pinGouInfo.getPingouPrice();
      }
      JDCouponInfo couponInfo = getShowCouponInfo(jdGoods.getCouponInfoList(), price);
      if (couponInfo == null) {
         return jdGoods.getPrice();
      }
      BigDecimal discount = couponInfo.getDiscount();
      // 计算券后价
      BigDecimal sub = price.subtract(couponInfo.getQuota());
      if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) {
@@ -679,12 +679,14 @@
      }
      return jdGoods;
   }
   /**
    * 获取类目
    * @param level 等级
    * @param parentId 上级id
    *
    * @param level
    *            等级
    * @param parentId
    *            上级id
    * @return
    */
   public static List<GoodsClassDTO> getCategoryList(int level, int parentId) {
@@ -699,12 +701,12 @@
            JSONArray jsonArray = json.getJSONArray("data");
            if (jsonArray != null && jsonArray.size() > 0) {
               List<GoodsClassDTO> list = new ArrayList<GoodsClassDTO>();
               for (int i=0;i <jsonArray.size() ;i ++ ) {
               for (int i = 0; i < jsonArray.size(); i++) {
                  Object object = jsonArray.get(i);
                  if (object == null)
                     continue;
                  JSONObject jsonClass = JSONObject.fromObject(object);
                  GoodsClassDTO goodsClass = new GoodsClassDTO();
                  goodsClass.setId(jsonClass.optString("id"));
                  goodsClass.setName(jsonClass.optString("categoryName"));
@@ -721,8 +723,11 @@
   /**
    * 获取类目
    * @param level 等级
    * @param parentId 上级id
    *
    * @param level
    *            等级
    * @param parentId
    *            上级id
    * @return
    */
   public static List<GoodsClassDTO> getCategoryCommiPlus(int level, int parentId) {
@@ -737,24 +742,24 @@
            JSONArray jsonArray = json.getJSONArray("data");
            if (jsonArray != null && jsonArray.size() > 0) {
               List<GoodsClassDTO> list = new ArrayList<GoodsClassDTO>();
               for (int i=0;i <jsonArray.size() ;i ++ ) {
               for (int i = 0; i < jsonArray.size(); i++) {
                  Object object = jsonArray.get(i);
                  if (object == null)
                     continue;
                  JSONObject jsonClass = JSONObject.fromObject(object);
                  GoodsClassDTO goodsClass = new GoodsClassDTO();
                  goodsClass.setId(jsonClass.optString("id"));
                  goodsClass.setName(jsonClass.optString("name"));
                  String selfMobileComm = jsonClass.optString("selfMobileComm");
                  if (!StringUtil.isNullOrEmpty(selfMobileComm))
                  if (!StringUtil.isNullOrEmpty(selfMobileComm))
                     goodsClass.setSelfComm(new BigDecimal(selfMobileComm));
                  String popMobileComm = jsonClass.optString("popMobileComm");
                  if (!StringUtil.isNullOrEmpty(popMobileComm))
                  if (!StringUtil.isNullOrEmpty(popMobileComm))
                     goodsClass.setPopComm(new BigDecimal(popMobileComm));
                  list.add(goodsClass);
               }
               return list;
@@ -765,5 +770,49 @@
      }
      return null;
   }
   /**
    * 获取需要展示的券
    *
    * @param couponInfoList
    *            券列表
    * @param price
    *            商品价格
    * @return
    */
   public static JDCouponInfo getShowCouponInfo(List<JDCouponInfo> couponInfoList, BigDecimal price) {
      if (couponInfoList != null && couponInfoList.size() > 0) {
         // 根据消费条件排序
         Comparator<JDCouponInfo> cm = new Comparator<JDCouponInfo>() {
            @Override
            public int compare(JDCouponInfo o1, JDCouponInfo o2) {
               return o1.getQuota().compareTo(o2.getQuota());
            }
         };
         Collections.sort(couponInfoList, cm);
         // 设置券信息为最接近的一个
         for (int i = couponInfoList.size() - 1; i >= 0; i--) {
            if (couponInfoList.get(i).getQuota().compareTo(price) <= 0) {
               return couponInfoList.get(i);
            }
         }
         return couponInfoList.get(0);
      }
      return null;
   }
   public static JDCouponInfo getShowCouponInfo(JDGoods goods) {
      if (goods == null)
         return null;
      BigDecimal price = null;
      JDPingouInfo pinGouInfo = goods.getPinGouInfo();
      if (pinGouInfo == null) {
         price = goods.getPrice();
      } else {
         price = pinGouInfo.getPingouPrice();
      }
      return getShowCouponInfo(goods.getCouponInfoList(), price);
   }
}