yujian
2019-07-25 0cc3b905e5945d1b4b02ee5f91a615bcfd8f08d6
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -19,12 +19,20 @@
import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderTradeIdMapMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.jd.JDOrder;
import com.yeshi.fanli.entity.jd.JDOrderItem;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.CommonOrderGoods;
import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
@@ -35,14 +43,19 @@
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.CommonOrderGoodsFactory;
import com.yeshi.fanli.util.factory.goods.CommonOrderFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -85,6 +98,12 @@
   @Resource
   private CommonOrderTradeIdMapMapper commonOrderTradeIdMapMapper;
   @Resource
   private CommonGoodsService commonGoodsService;
   @Resource
   private HongBaoOrderService hongBaoOrderService;
   // 奖励订单图片
   public final static String PIC_REWARD = "http://img.flqapp.com/resource/order/order_state_reward.png";
@@ -125,26 +144,26 @@
   @Override
   public List<CommonOrderVO> listGroupOrderNoByUid(long start, int count, Long uid, Integer state, Integer type,
         Integer orderState, String orderNo, String startTime, String endTime, Integer dateType)
         Integer orderState, String orderNo, String startTime, String endTime, Integer dateType, Integer source)
         throws CommonOrderException {
      return commonOrderMapper.listUserOrder(start, count, uid, state, type, orderState, orderNo, startTime, endTime,
            dateType);
            dateType, source);
   }
   @Override
   public long countGroupOrderNoByUid(Long uid, Integer state, Integer type, Integer orderState, String orderNo,
         String startTime, String endTime, Integer dateType) throws CommonOrderException {
      return commonOrderMapper.countUserOrder(uid, state, type, orderState, orderNo, startTime, endTime, dateType);
         String startTime, String endTime, Integer dateType, Integer source) throws CommonOrderException {
      return commonOrderMapper.countUserOrder(uid, state, type, orderState, orderNo, startTime, endTime, dateType, source);
   }
   @Override
   public List<CommonOrderVO> getOrderByUid(Integer page, Long uid, Integer state, Integer type, Integer orderState,
         String orderNo, String startTime, String endTime, Integer dateType) throws CommonOrderException {
   public List<CommonOrderVO> getOrderByUid(AcceptData acceptData,Integer page, Long uid, Integer state, Integer type, Integer orderState,
         String orderNo, String startTime, String endTime, Integer dateType, Integer source) throws CommonOrderException {
      int pageSize = Constant.PAGE_SIZE;
      List<CommonOrderVO> listOrder = listGroupOrderNoByUid((page - 1) * pageSize, pageSize, uid, state, type,
            orderState, orderNo, startTime, endTime, dateType);
            orderState, orderNo, startTime, endTime, dateType, source);
      // 订单信息为空
      if (listOrder == null || listOrder.size() == 0) {
@@ -160,24 +179,24 @@
      }
      // 数据加工重新组织
      listDataFactory(listOrder, listGoods, uid);
      listDataFactory(acceptData, listOrder, listGoods, uid);
      return listOrder;
   }
   @Override
   public Map<String, BigDecimal> countHistoryOrder(Long uid, Integer day) {
      return commonOrderMapper.countHistoryOrder(uid, day);
   public Map<String, BigDecimal> countHistoryOrder(Long uid, Integer day, Integer source) {
      return commonOrderMapper.countHistoryOrder(uid, day, source);
   }
   @Override
   public long countBonusOrderNumber(Long uid, Integer type, Integer day, String startTime, String endTime) {
      return commonOrderMapper.countBonusOrderNumber(uid, type, day, startTime, endTime);
   public long countBonusOrderNumber(Long uid, Integer type, Integer day, String startTime, String endTime, Integer source) {
      return commonOrderMapper.countBonusOrderNumber(uid, type, day, startTime, endTime, source);
   }
   @Override
   public BigDecimal countBonusOrderMoney(Long uid, Integer type, Integer day, String startTime, String endTime) {
      return commonOrderMapper.countBonusOrderMoney(uid, type, day, startTime, endTime);
   public BigDecimal countBonusOrderMoney(Long uid, Integer type, Integer day, String startTime, String endTime, Integer source) {
      return commonOrderMapper.countBonusOrderMoney(uid, type, day, startTime, endTime, source);
   }
   @Override
@@ -188,23 +207,45 @@
   @Override
   public Map<String, BigDecimal> countByUidAndOrderState(Long uid, Integer type, String startTime, String endTime,
         Integer day) {
      return commonOrderMapper.countByUidAndOrderState(uid, type, startTime, endTime, day);
         Integer day, Integer source) {
      return commonOrderMapper.countByUidAndOrderState(uid, type, startTime, endTime, day, source);
   }
   public void listDataFactory(List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) {
   public void listDataFactory(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) {
      List<String> listNo = new ArrayList<String>();
      List<String> listTB = new ArrayList<String>();
      List<String> listJD = new ArrayList<String>();
      List<String> listPDD = new ArrayList<String>();
      for (CommonOrderVO commonOrderVO : listOrder) {
         listNo.add(commonOrderVO.getOrderNo());
         Integer sourceType = commonOrderVO.getSourceType();
         if (sourceType == null) {
            continue;
         } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
            listTB.add(commonOrderVO.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_JD) {
            listJD.add(commonOrderVO.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
            listPDD.add(commonOrderVO.getOrderNo());
         }
      }
      // 已经使用券订单
      List<UserSystemCouponRecord> couponRecordList = userSystemCouponRecordService.getRecordByOrderNoList(listNo);
      List<UserSystemCouponRecord> listRecordTB = null;
      if (listTB.size() > 0) {
         listRecordTB = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_TAOBAO, listTB);
      }
       List<UserSystemCouponRecord> listRecordJD = null;
      if (listJD.size() > 0) {
         listRecordJD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_JD, listJD);
      }
      List<UserSystemCouponRecord> listRecordPDD = null;
      if (listPDD.size() > 0) {
         listRecordPDD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_PDD, listPDD);
      }
      /* 组合商品信息 */
      for (CommonOrderVO commonOrder : listGoods) {
         CommonOrderGoods goods = commonOrder.getCommonOrderGoods();
         if (goods == null) {
            continue;
@@ -212,7 +253,6 @@
         String orderNo1 = commonOrder.getOrderNo();
         Integer sourceType = commonOrder.getSourceType();
         for (CommonOrderVO order : listOrder) {
            String orderNo2 = order.getOrderNo();
            Integer sourceType2 = order.getSourceType();
@@ -259,13 +299,19 @@
               listOrderGoods.add(commonGoodsVO);
               Integer orderType = commonOrder.getOrderType();
               Integer orderType = order.getOrderType();
               if (orderType == null) {
                  String shopType = commonGoodsVO.getShopType();
                  if (CommonOrderGoodsVO.TYPE_TAOBAO.equalsIgnoreCase(shopType)) {
                     commonOrder.setOrderType(1);
                     order.setOrderType(1);
                  } else if (CommonOrderGoodsVO.TYPE_TMALL.equalsIgnoreCase(shopType)) {
                     commonOrder.setOrderType(2);
                     order.setOrderType(2);
                  }
                  if (Constant.SOURCE_TYPE_JD == sourceType2) {
                     order.setOrderType(3);
                  } else if (Constant.SOURCE_TYPE_PDD == sourceType2) {
                     order.setOrderType(4);
                  }
               }
@@ -324,30 +370,33 @@
         } else if (CommonOrder.STATE_WQ == orderState) {
            orderStateContent = "已维权";
            /* 订单维权 判断是否全部维权 */
            List<TaoBaoWeiQuanOrder> listWQ = taoBaoWeiQuanOrderMapper
                  .selectListByOrderIdAndState(order.getOrderNo(), "维权成功");
            Integer sourceType = order.getSourceType();
            if (sourceType != null && sourceType == Constant.SOURCE_TYPE_TAOBAO) {
               /* 订单维权 判断是否全部维权 */
               List<TaoBaoWeiQuanOrder> listWQ = taoBaoWeiQuanOrderMapper
                     .selectListByOrderIdAndState(order.getOrderNo(), "维权成功");
            boolean isPart = false;// 默认失效
               boolean isPart = false;// 默认失效
            if (listWQ != null && listWQ.size() > 0) {
               BigDecimal fanTotalMoney = new BigDecimal(0);
               for (TaoBaoWeiQuanOrder weiQuanOrder : listWQ) {
                  BigDecimal fanMoney = weiQuanOrder.getFanMoney();
                  if (fanMoney != null) {
                     fanTotalMoney = MoneyBigDecimalUtil.add(fanTotalMoney, fanMoney);
               if (listWQ != null && listWQ.size() > 0) {
                  BigDecimal fanTotalMoney = new BigDecimal(0);
                  for (TaoBaoWeiQuanOrder weiQuanOrder : listWQ) {
                     BigDecimal fanMoney = weiQuanOrder.getFanMoney();
                     if (fanMoney != null) {
                        fanTotalMoney = MoneyBigDecimalUtil.add(fanTotalMoney, fanMoney);
                     }
                  }
                  if (fanTotalMoney.compareTo(order.getHongBao()) < 0) {
                     isPart = true;
                  }
               }
               if (fanTotalMoney.compareTo(order.getHongBao()) < 0) {
                  isPart = true;
               if (isPart) {
                  hongBaoState = HongBaoV2.STATE_BUFENSHIXIAO; // 部分失效
               } else {
                  hongBaoState = HongBaoV2.STATE_SHIXIAO; // 全部失效
               }
            }
            if (isPart) {
               hongBaoState = HongBaoV2.STATE_BUFENSHIXIAO; // 部分失效
            } else {
               hongBaoState = HongBaoV2.STATE_SHIXIAO; // 全部失效
            }
         }
         orderStateMap.put("content", orderStateContent);
@@ -444,116 +493,147 @@
         // 非自购的订单 不显示返利、免单详情
         if (HongBaoV2.TYPE_ZIGOU != hongBaoType) {
            // 订单标识
            order.setSignList(signList);
         } else {
            // 是否免单商品
            boolean freeOrder = false;
            // 是否奖励成功
            boolean rewardSuccess = false;
            Integer sourceType = order.getSourceType();
            // 奖励订单、免单 使用记录
            if (couponRecordList != null && couponRecordList.size() > 0) {
               for (UserSystemCouponRecord couponRecord : couponRecordList) {
                  // 订单号匹配
                  if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
                     String systemCouponType = couponRecord.getCouponType();
                     Integer state = couponRecord.getState();
                     // 奖励订单: 且成功
                     if (CouponTypeEnum.rebatePercentCoupon.name().equals(systemCouponType)
                           && UserSystemCouponRecord.STATE_SUCCESS == state) {
                        rewardSuccess = true;
                        signList.add(PIC_REWARD); // 加入奖励成功图片
                     } else if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                           || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)) {
                        if (UserSystemCouponRecord.STATE_FREE_ON == state) {
                           // 免单中
                           freeOrder = true;
                           signList.add(PIC_FREE_ON);
                        } else if (UserSystemCouponRecord.STATE_SUCCESS == state) {
                           // 免单成功
                           freeOrder = true;
                           signList.add(PIC_FREE_SUCCEED);
                        } else if (UserSystemCouponRecord.STATE_FAIL_RULE == state
                              || UserSystemCouponRecord.STATE_FAIL_DRAWBACK == state) {
                           // 规则不匹配、退款
                           freeOrder = true;
                           signList.add(PIC_FREE_FAIL);
                        }
                     }
                     break;
                  }
               }
            }
            // 订单标识
            order.setSignList(signList);
            boolean rewardOrder = false;
            int type = 1; // 1 常规跳转页面 2弹出选项(奖励券)
            if (rewardSuccess) {
               // 奖励成功
               rewardOrder = true;
            } else if (hasRewardCoupon && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
                  && HongBaoV2.STATE_YILINGQU == hongBaoState) {
               // 有可用的奖励券 、非免单订单 、且已到账的 、返利订单
               type = 2;
               rewardOrder = true;
            }
            if (rewardOrder) {
               ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
               // 奖励券进度详情
               rewardStyleVO.setContent("返利奖励 >");
               rewardStyleVO.setColor("#E5005C");
               rewardStyleVO.setBottomColor("#FFDCEA");
               Map<String, Object> jumpLink = new HashMap<String, Object>();
               jumpLink.put("orderNo", order.getOrderNo());
               Map<String, Object> jump = new HashMap<String, Object>();
               jump.put("type", type);
               jump.put("params", jumpLink);
               jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
               Map<String, Object> rewardMap = new HashMap<String, Object>();
               rewardMap.put("text", rewardStyleVO);
               rewardMap.put("jump", jump);
               order.setRewardDetail(rewardMap);
            }
            if (freeOrder) {
               ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
               // 返利、免单详情
               rewardStyleVO.setContent("免单详情 >");
               rewardStyleVO.setColor("#E5005C");
               rewardStyleVO.setBottomColor("#FFDCEA");
               Map<String, Object> jumpLink = new HashMap<String, Object>();
               jumpLink.put("orderNo", order.getOrderNo());
               Map<String, Object> jump = new HashMap<String, Object>();
               jump.put("type", 1); // 页面跳转
               jump.put("params", jumpLink);
               jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("freeCouponDetail"));
               Map<String, Object> rewardMap = new HashMap<String, Object>();
               rewardMap.put("text", rewardStyleVO);
               rewardMap.put("jump", jump);
               order.setRewardDetail(rewardMap);
            if (sourceType == null) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType, null, signList);
            } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordTB, signList);
            } else if (sourceType == Constant.SOURCE_TYPE_JD) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordJD, signList);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordPDD, signList);
            }
         }
         // 邀请 隐藏订单号
         if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) {
             String orderNo = order.getOrderNo();
             orderNo = orderNo.substring(0, orderNo.length()-6);
             order.setOrderNo(orderNo + "******");
         } else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
               || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType
               || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
             String orderNo = order.getOrderNo();
             orderNo = orderNo.substring(0, orderNo.length()-6);
             order.setOrderNo(orderNo + "******");
         }
      }
   }
   /**
    * 订单: 免单标识  奖励标识
    * @param order
    * @param hasRewardCoupon
    * @param hongBaoState
    * @param list
    * @param signList
    */
   public void setSystemCouponRecord(CommonOrderVO order, boolean hasRewardCoupon, Integer hongBaoState, Integer hongBaoType,
         List<UserSystemCouponRecord> list, List<String> signList) {
      // 是否免单商品
      boolean freeOrder = false;
      // 是否奖励成功
      boolean rewardSuccess = false;
      if (list != null && list.size() > 0) {
         for (UserSystemCouponRecord couponRecord : list) {
            // 订单号匹配
            if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
               Integer state = couponRecord.getState();
               String systemCouponType = couponRecord.getCouponType();
               // 奖励订单: 且成功
               if (CouponTypeEnum.rebatePercentCoupon.name().equals(systemCouponType)
                     && UserSystemCouponRecord.STATE_SUCCESS == state) {
                  rewardSuccess = true;
                  signList.add(PIC_REWARD); // 加入奖励成功图片
               } else if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                     || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)) {
                  if (UserSystemCouponRecord.STATE_FREE_ON == state) {
                     // 免单中
                     freeOrder = true;
                     signList.add(PIC_FREE_ON);
                  } else if (UserSystemCouponRecord.STATE_SUCCESS == state) {
                     // 免单成功
                     freeOrder = true;
                     signList.add(PIC_FREE_SUCCEED);
                  } else if (UserSystemCouponRecord.STATE_FAIL_RULE == state
                        || UserSystemCouponRecord.STATE_FAIL_DRAWBACK == state) {
                     // 规则不匹配、退款
                     freeOrder = true;
                     signList.add(PIC_FREE_FAIL);
                  }
               }
               break;
            }
         }
      }
      // 订单标识
      order.setSignList(signList);
      boolean rewardOrder = false;
      int type = 1; // 1 常规跳转页面 2弹出选项(奖励券)
      if (rewardSuccess) {
         // 奖励成功
         rewardOrder = true;
      } else if (hasRewardCoupon && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
            && HongBaoV2.STATE_YILINGQU == hongBaoState) {
         // 有可用的奖励券 、非免单订单 、且已到账的 、返利订单
         type = 2;
         rewardOrder = true;
      }
      if (rewardOrder) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         // 奖励券进度详情
         rewardStyleVO.setContent("返利奖励 >");
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         Map<String, Object> jumpLink = new HashMap<String, Object>();
         jumpLink.put("orderNo", order.getOrderNo());
         Map<String, Object> jump = new HashMap<String, Object>();
         jump.put("type", type);
         jump.put("params", jumpLink);
         jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
         Map<String, Object> rewardMap = new HashMap<String, Object>();
         rewardMap.put("text", rewardStyleVO);
         rewardMap.put("jump", jump);
         order.setRewardDetail(rewardMap);
      }
      if (freeOrder) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         // 返利、免单详情
         rewardStyleVO.setContent("免单详情 >");
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         Map<String, Object> jumpLink = new HashMap<String, Object>();
         jumpLink.put("orderNo", order.getOrderNo());
         Map<String, Object> jump = new HashMap<String, Object>();
         jump.put("type", 1); // 页面跳转
         jump.put("params", jumpLink);
         jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("freeCouponDetail"));
         Map<String, Object> rewardMap = new HashMap<String, Object>();
         rewardMap.put("text", rewardStyleVO);
         rewardMap.put("jump", jump);
         order.setRewardDetail(rewardMap);
      }
   }
@@ -584,77 +664,220 @@
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
      for (TaoBaoOrder taoBaoOrder : taoBaoOrders) {
         CommonOrder commonOrder = commonOrderMapper.selectByOrderNoAndOrderTypeAndOrderBy(taoBaoOrder.getOrderId(),
               Constant.SOURCE_TYPE_TAOBAO, taoBaoOrder.getOrderBy());
         if (commonOrder == null)// 新增
         CommonOrder newCommonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
         CommonOrderGoods cog = new CommonOrderGoods();
         cog.setGoodsId(taoBaoOrder.getAuctionId() + "");
         cog.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
         newCommonOrder.setCommonOrderGoods(cog);
         newCommonOrder.setStateWholeOrder(wholeOrderState);
         // 订单商品插入
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(cog.getGoodsId(),
               cog.getGoodsType());
         if (commonGoodsList.size() <= 0)// 不存在就插入商品
         {
            commonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
            CommonOrderGoods goods = new CommonOrderGoods();
            goods.setGoodsId(taoBaoOrder.getAuctionId() + "");
            goods.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
            // 商品是否已经插入
            List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper
                  .listByGoodsIdAndGoodsType(goods.getGoodsId(), goods.getGoodsType());
            if (commonGoodsList.size() <= 0)// 不存在就插入商品
            {
               TaoBaoGoodsBrief taoBaoGoods = null;
            TaoBaoGoodsBrief taoBaoGoods = null;
            try {
               taoBaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(taoBaoOrder.getAuctionId());
            } catch (TaobaoGoodsDownException e) {
               e.printStackTrace();
               LogHelper.errorDetailInfo(e, "AUCTIONID:" + taoBaoOrder.getAuctionId(), "");
               try {
                  taoBaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(taoBaoOrder.getAuctionId());
               } catch (TaobaoGoodsDownException e) {
                  e.printStackTrace();
                  LogHelper.errorDetailInfo(e, "AUCTIONID:"+taoBaoOrder.getAuctionId(), "");
                  taoBaoGoods = TaoBaoUtil.getSimpleGoodsBrief(taoBaoOrder.getAuctionId());
               } catch (Exception e1) {
                  CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(
                        taoBaoOrder.getAuctionId(), Constant.SOURCE_TYPE_TAOBAO);
                  if (commonGoods != null)
                     taoBaoGoods = TaoBaoUtil.convert(commonGoods);
               }
               if (taoBaoGoods != null) {
                  goods = CommonOrderGoodsFactory.create(taoBaoGoods);
               }
               goods.setCreateTime(new Date());
               goods.setUpdateTime(new Date());
               commonOrderGoodsMapper.insertSelective(goods);
            } else
               goods.setId(commonGoodsList.get(commonGoodsList.size() - 1).getId());
            commonOrder.setCommonOrderGoods(goods);
            commonOrder.setUserInfo(new UserInfo(uid));
            commonOrder.setCreateTime(new Date());
            commonOrder.setStateWholeOrder(wholeOrderState);
            commonOrderMapper.insertSelective(commonOrder);
            // 插入映射,保证交易ID的完整性
            commonOrderTradeIdMapMapper.insertSelective(
                  new CommonOrderTradeIdMap(commonOrder.getId(), commonOrder.getTradeId(), new Date(),commonOrder.getSourceType()));
            commonOrderList.add(commonOrder);
            continue;
         } else {// 修改
            // 已经结算或者已经失效的订单不处理
            if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_SX) {
               commonOrderList.add(commonOrder);
               continue;
            }
            CommonOrder newCommonOrder = TaoBaoOrderUtil.convert(taoBaoOrder);
            // 交易ID一致才修改
            if (commonOrder.getTradeId() != null
                  && commonOrder.getTradeId().equalsIgnoreCase(newCommonOrder.getTradeId())) {
               CommonOrder updateCommonOrder = new CommonOrder(commonOrder.getId());
               updateCommonOrder.seteIncome(newCommonOrder.geteIncome());
               updateCommonOrder.setEstimate(newCommonOrder.getEstimate());
               updateCommonOrder.setPayment(newCommonOrder.getPayment());
               updateCommonOrder.setSettlement(newCommonOrder.getSettlement());
               updateCommonOrder.setSettleTime(newCommonOrder.getSettleTime());
               updateCommonOrder.setState(newCommonOrder.getState());
               updateCommonOrder.setStateWholeOrder(wholeOrderState);
               updateCommonOrder.setUpdateTime(new Date());
               updateCommonOrder.setTradeId(newCommonOrder.getTradeId());
               commonOrderMapper.updateByPrimaryKeySelective(updateCommonOrder);
               commonOrderList.add(commonOrderMapper.selectByPrimaryKey(updateCommonOrder.getId()));
            } else
               commonOrderList.add(commonOrder);
            if (taoBaoGoods != null) {
               cog = CommonOrderGoodsFactory.create(taoBaoGoods);
            }
            cog.setCreateTime(new Date());
            cog.setUpdateTime(new Date());
            commonOrderGoodsMapper.insertSelective(cog);
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
      }
      return commonOrderList;
   }
   @Transactional
   @Override
   public List<CommonOrder> addPDDOrder(List<PDDOrder> pddOrderList, Long uid) throws CommonOrderException {
      List<CommonOrder> commonOrderList = new ArrayList<>();
      // 判断所有的订单状态
      int invalidCount = 0;
      for (PDDOrder order : pddOrderList) {
         if (order.getOrderStatus() == -1 || order.getOrderStatus() == 4 || order.getOrderStatus() == 8) {
            invalidCount++;
         }
      }
      // 获取整体订单的状态
      int wholeOrderState = 0;
      if (pddOrderList.size() == invalidCount)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO;
      else if (invalidCount == 0)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO;
      else
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
      for (PDDOrder pddOrder : pddOrderList) {
         CommonOrder newCommonOrder = CommonOrderFactory.create(pddOrder);
         CommonOrderGoods cog = new CommonOrderGoods();
         cog.setGoodsId(pddOrder.getGoodsId() + "");
         cog.setGoodsType(Constant.SOURCE_TYPE_PDD);
         newCommonOrder.setCommonOrderGoods(cog);
         newCommonOrder.setStateWholeOrder(wholeOrderState);
         // 订单商品插入
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(cog.getGoodsId(),
               cog.getGoodsType());
         if (commonGoodsList.size() <= 0)// 不存在就插入商品
         {
            PDDGoodsDetail pddGoods = null;
            pddGoods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(cog.getGoodsId()));
            if (pddGoods != null) {
               cog = CommonOrderGoodsFactory.create(pddGoods);
            }
            cog.setCreateTime(new Date());
            cog.setUpdateTime(new Date());
            commonOrderGoodsMapper.insertSelective(cog);
            newCommonOrder.setCommonOrderGoods(cog);
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
      }
      return commonOrderList;
   }
   @Transactional
   @Override
   public List<CommonOrder> addJDOrder(JDOrder jdOrder, Long uid) throws CommonOrderException {
      List<CommonOrder> commonOrderList = new ArrayList<>();
      // 判断所有的订单状态
      int invalidCount = 0;
      for (JDOrderItem tb : jdOrder.getOrderItemList()) {
         if (tb.getValidCode() < 16) {
            invalidCount++;
         }
      }
      // 获取整体订单的状态
      int wholeOrderState = 0;
      if (jdOrder.getOrderItemList().size() == invalidCount)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO;
      else if (invalidCount == 0)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO;
      else
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
      List<JDOrderItem> orderItemList = jdOrder.getOrderItemList();
      jdOrder.setOrderItemList(null);
      for (JDOrderItem itemOrder : orderItemList) {
         itemOrder.setOrder(jdOrder);
         CommonOrder newCommonOrder = CommonOrderFactory.create(itemOrder);
         CommonOrderGoods cog = new CommonOrderGoods();
         cog.setGoodsId(itemOrder.getSkuId() + "");
         cog.setGoodsType(Constant.SOURCE_TYPE_JD);
         newCommonOrder.setCommonOrderGoods(cog);
         newCommonOrder.setStateWholeOrder(wholeOrderState);
         // 订单商品插入
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(cog.getGoodsId(),
               cog.getGoodsType());
         if (commonGoodsList.size() <= 0)// 不存在就插入商品
         {
            JDGoods goods = JDApiUtil.getGoodsDetail(itemOrder.getSkuId());
            if (goods != null) {
               cog = CommonOrderGoodsFactory.create(goods);
            }
            cog.setCreateTime(new Date());
            cog.setUpdateTime(new Date());
            commonOrderGoodsMapper.insertSelective(cog);
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
      }
      return commonOrderList;
   }
   /**
    * 添加订单
    *
    * @param commonOrder
    */
   @Transactional
   private CommonOrder addCommonOrder(CommonOrder commonOrder) throws CommonOrderException {
      // 判断商品是否存在
      if (commonOrder == null)
         throw new CommonOrderException(1, "订单为空");
      if (commonOrder.getUserInfo() == null)
         throw new CommonOrderException(2, "订单用户为空");
      if (commonOrder.getCommonOrderGoods() == null || commonOrder.getCommonOrderGoods().getGoodsId() == null
            || commonOrder.getCommonOrderGoods().getGoodsType() == null)
         throw new CommonOrderException(3, "订单商品为空");
      // 不存在就插入,存在就不管
      CommonOrderGoods goods = commonOrder.getCommonOrderGoods();
      // 之前不存在于数据库
      if (commonOrder.getCommonOrderGoods().getId() == null) {
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper
               .listByGoodsIdAndGoodsType(goods.getGoodsId(), goods.getGoodsType());
         if (commonGoodsList == null || commonGoodsList.size() < 1) {// 不存在
            commonOrderGoodsMapper.insertSelective(goods);
         } else {// 存在
            goods = commonGoodsList.get(0);
         }
         if (goods.getId() == null)
            throw new CommonOrderException(4, "商品插入失败");
         commonOrder.setCommonOrderGoods(goods);
      }
      CommonOrder oldCommonOrder = null;
      if (!StringUtil.isNullOrEmpty(commonOrder.getTradeId()))
         oldCommonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(commonOrder.getSourceType(),
               commonOrder.getTradeId());
      else
         oldCommonOrder = commonOrderMapper.selectByOrderNoAndOrderTypeAndOrderBy(commonOrder.getOrderNo(),
               commonOrder.getSourceType(), commonOrder.getOrderBy());
      if (oldCommonOrder == null)// 新增
      {
         commonOrder.setCreateTime(new Date());
         commonOrderMapper.insertSelective(commonOrder);
         // 插入映射,保证交易ID的完整性
         commonOrderTradeIdMapMapper.insertSelective(new CommonOrderTradeIdMap(commonOrder.getId(),
               commonOrder.getTradeId(), new Date(), commonOrder.getSourceType()));
         return commonOrder;
      } else {// 修改
         // 已经结算或者已经失效的订单不处理
         if (oldCommonOrder.getState() == CommonOrder.STATE_JS
               || oldCommonOrder.getState() == CommonOrder.STATE_SX) {
            return oldCommonOrder;
         }
         // 交易ID一致才修改
         if (commonOrder.getTradeId() != null
               && commonOrder.getTradeId().equalsIgnoreCase(oldCommonOrder.getTradeId())) {
            CommonOrder updateCommonOrder = new CommonOrder(oldCommonOrder.getId());
            updateCommonOrder.seteIncome(commonOrder.geteIncome());
            updateCommonOrder.setEstimate(commonOrder.getEstimate());
            updateCommonOrder.setPayment(commonOrder.getPayment());
            updateCommonOrder.setSettlement(commonOrder.getSettlement());
            updateCommonOrder.setSettleTime(commonOrder.getSettleTime());
            updateCommonOrder.setState(commonOrder.getState());
            updateCommonOrder.setStateWholeOrder(commonOrder.getStateWholeOrder());
            updateCommonOrder.setUpdateTime(new Date());
            updateCommonOrder.setTradeId(commonOrder.getTradeId());
            commonOrderMapper.updateByPrimaryKeySelective(updateCommonOrder);
            return commonOrderMapper.selectByPrimaryKey(updateCommonOrder.getId());
         } else
            return oldCommonOrder;
      }
   }
   @Override
@@ -746,10 +969,10 @@
   @Override
   public List<CommonOrderVO> listQuery(long start, int count, Integer keyType, String key, Integer state,
         Integer type, Integer orderState, String startTime, String endTime) throws CommonOrderException {
         Integer type, Integer orderState, String startTime, String endTime, Integer source) throws CommonOrderException {
      List<CommonOrderVO> list = commonOrderMapper.listQuery(start, count, keyType, key, state, type, orderState,
            startTime, endTime);
            startTime, endTime, source);
      if (list == null) {
         list = new ArrayList<CommonOrderVO>();
@@ -758,7 +981,38 @@
      if (list.size() == 0) {
         return list;
      }
      List<String> listTB = new ArrayList<String>();
      List<String> listJD = new ArrayList<String>();
      List<String> listPDD = new ArrayList<String>();
      for (CommonOrderVO commonOrderVO : list) {
         Integer sourceType = commonOrderVO.getSourceType();
         if (sourceType == null) {
            continue;
         } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
            listTB.add(commonOrderVO.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_JD) {
            listJD.add(commonOrderVO.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
            listPDD.add(commonOrderVO.getOrderNo());
         }
      }
      List<UserSystemCouponRecord> listRecordTB = null;
      if (listTB.size() > 0) {
         listRecordTB = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_TAOBAO, listTB);
      }
       List<UserSystemCouponRecord> listRecordJD = null;
      if (listJD.size() > 0) {
         listRecordJD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_JD, listJD);
      }
      List<UserSystemCouponRecord> listRecordPDD = null;
      if (listPDD.size() > 0) {
         listRecordPDD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_PDD, listPDD);
      }
      SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
      for (CommonOrderVO order : list) {
@@ -835,7 +1089,58 @@
               }
            }
         }
         Integer sourceType = order.getSourceType();
         // 奖励订单、免单 使用记录
         if (sourceType == null) {
         } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO && listRecordTB != null && listRecordTB.size() > 0) {
            for (UserSystemCouponRecord couponRecord : listRecordTB) {
               if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
                  String systemCouponType = couponRecord.getCouponType();
                  Integer couponState = couponRecord.getState();
                  if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                        || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)) {
                      if (UserSystemCouponRecord.STATE_SUCCESS == couponState) {
                        // 免单成功
                         order.setOtherState(1);
                     }
                  }
                  break;
               }
            }
         } else if (sourceType == Constant.SOURCE_TYPE_JD && listRecordJD != null && listRecordJD.size() > 0) {
            for (UserSystemCouponRecord couponRecord : listRecordJD) {
               if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
                  String systemCouponType = couponRecord.getCouponType();
                  Integer couponState = couponRecord.getState();
                  if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                        || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)) {
                      if (UserSystemCouponRecord.STATE_SUCCESS == couponState) {
                        // 免单成功
                         order.setOtherState(1);
                     }
                  }
                  break;
               }
            }
         } else if (sourceType == Constant.SOURCE_TYPE_PDD && listRecordPDD != null && listRecordPDD.size() > 0) {
            for (UserSystemCouponRecord couponRecord : listRecordPDD) {
               if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
                  String systemCouponType = couponRecord.getCouponType();
                  Integer couponState = couponRecord.getState();
                  if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                        || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)) {
                      if (UserSystemCouponRecord.STATE_SUCCESS == couponState) {
                        // 免单成功
                         order.setOtherState(1);
                     }
                  }
                  break;
               }
            }
         }
      }
      return list;
@@ -844,25 +1149,20 @@
   @Override
   public long countQuery(Integer keyType, String key, Integer state, Integer type, Integer orderState,
         String startTime, String endTime) throws CommonOrderException {
      return commonOrderMapper.countQuery(keyType, key, state, type, orderState, startTime, endTime);
         String startTime, String endTime, Integer source) throws CommonOrderException {
      return commonOrderMapper.countQuery(keyType, key, state, type, orderState, startTime, endTime, source);
   }
   @Override
   public CommonOrderVO getInfoByOrderNo(Long uid, String orderNo) throws CommonOrderException {
      List<CommonOrderVO> list = getOrderByUid(1, uid, null, null, null, orderNo, null, null, null);
      if (list == null || list.size() == 0) {
         return null;
      } else {
         return list.get(0);
      }
   }
   @Override
   public CommonOrderVO getCommonOrderByOrderNo(Long uid, String orderNo, Integer orderState)
   public CommonOrderVO getCommonOrderByOrderNo(Long uid, String orderNo, Integer orderState, Integer sourceType)
         throws CommonOrderException {
      CommonOrderVO commonOrderVO = commonOrderMapper.getCommonOrderByOrderNo(uid, orderNo, orderState);
      if (sourceType == null) {
         sourceType = Constant.SOURCE_TYPE_TAOBAO;
      }
      CommonOrderVO commonOrderVO = commonOrderMapper.getCommonOrderByOrderNo(uid, orderNo, orderState, sourceType);
      // 订单信息为空
      if (commonOrderVO == null) {
         return null;
@@ -887,13 +1187,13 @@
         }
         String orderNo1 = commonOrder.getOrderNo();
         Integer sourceType = commonOrder.getSourceType();
         Integer sourceType1 = commonOrder.getSourceType();
         String orderNo2 = commonOrderVO.getOrderNo();
         Integer sourceType2 = commonOrderVO.getSourceType();
         // 来源、订单号相同
         if (sourceType.equals(sourceType2) && orderNo1.equals(orderNo2)) {
         if (sourceType1.equals(sourceType2) && orderNo1.equals(orderNo2)) {
            // 加入商品信息
            List<CommonOrderGoodsVO> listOrderGoods = commonOrderVO.getListOrderGoods();
@@ -951,30 +1251,6 @@
      return commonOrderVO;
   }
   @Override
   public List<CommonOrderVO> getCouponHongbaoByOrderNo(Long uid, Integer hongBaoState, String orderNo)
         throws CommonOrderException {
      List<CommonOrderVO> listOrder = commonOrderMapper.getCouponHongbaoByOrderNo(uid, hongBaoState, orderNo);
      // 订单信息为空
      if (listOrder == null || listOrder.size() == 0) {
         listOrder = new ArrayList<CommonOrderVO>();
         return listOrder;
      }
      // 商品信息
      List<CommonOrderVO> listGoods = commonOrderMapper.listOrderGoodsInfo(listOrder);
      // 订单商品为空
      if (listGoods == null || listGoods.size() == 0) {
         return listOrder;
      }
      // 数据加工重新组织
      listDataFactory(listOrder, listGoods, uid);
      return listOrder;
   }
   @Override
   public JSONObject getRewardJumpInfo(String orderNo) {
@@ -1011,7 +1287,48 @@
   @Override
   public CommonOrder selectBySourceTypeAndTradeId(int sourceType, String tradeId) {
      return commonOrderMapper.selectBySourceTypeAndTradeId(sourceType, tradeId);
   }
   @Transactional
   @Override
   public void deleteErrorCommonOrder(Long coId) {
      // 查询是否返利到账
      HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(coId);
      if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_YILINGQU)
         return;
      List<HongBaoV2> hongBaoList = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
      boolean canDelete = true;
      for (HongBaoV2 child : hongBaoList)
         if (child.getState() == HongBaoV2.STATE_YILINGQU) {
            canDelete = false;
            break;
         }
      // 不能删除
      if (!canDelete)
         return;
      // 删除child
      for (HongBaoV2 child : hongBaoList)
         hongBaoV2Service.deleteByPrimaryKey(child.getId());
      // 删除主红包
      hongBaoV2Service.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
      // 删除hongbaoOrder
      hongBaoOrderService.deleteByPrimaryKey(hongBaoOrder.getId());
      // 删除CommonOrder
      commonOrderMapper.deleteByPrimaryKey(hongBaoOrder.getCommonOrder().getId());
   }
   @Override
   public List<CommonOrder> listBySourceTypeAndTradeId(int sourceType, String tradeId) {
      return commonOrderMapper.listBySourceTypeAndTradeId(sourceType, tradeId);
   }
   @Override
   public List<CommonOrder> listBySourceTypeAndStateAndThirdCrateTime(int sourceType, Integer state, Long minTime,
         Long maxTime, int page, int pageSize) {
      return commonOrderMapper.listBySourceTypeAndStateAndThirdCrateTime(sourceType, state, minTime, maxTime,
            (page - 1) * pageSize, pageSize);
   }
}