/**
   * 从单据获取主数量、辅数量、辅单位,从销售价目表查询零售单位,从存货档案查询主单位、换算率 if 零售单位==主单位 零售数量=主数量 if 零售单位==辅单位 零售数量=辅数量 else
   * 按照 零售单位和主单位 的换算率 , 零售数量=主数量/换算率
   *
   * @param voItems
   * @throws BusinessException
   */
  public static void convertToRetailMeas(IMeasDownConv[] voItems, String pk_corp)
      throws BusinessException {

    if (voItems == null || voItems.length == 0) return;

    HashMap hm = new HashMap();
    for (int i = 0; i < voItems.length; i++) {
      hm.put(voItems[i].getInvbas(), voItems[i].getInvbas());
    }

    String[] invids = new String[hm.size()];
    hm.keySet().toArray(invids);

    HashMap hmData = queryInvVos(invids);

    HashMap hmMeas = queryRetailMeas(invids, pk_corp);

    String sMainMeas = null;

    ArrayList alinv = null;
    String sRetailMeas = null;

    // 未查询到存货信息
    ArrayList<String> noInv = new ArrayList<String>();
    // 未查询到零售单位
    ArrayList<String> noMeas = new ArrayList<String>();
    // 未查询到换算率
    ArrayList<String> noHsl = new ArrayList<String>();

    for (int i = 0; i < voItems.length; i++) {

      alinv = (ArrayList) hmData.get(voItems[i].getInvbas());
      if (alinv == null || alinv.size() == 0 || alinv.get(0) == null) {
        noInv.add(voItems[i].getInvbas());
        continue;
      }

      sRetailMeas = (String) hmMeas.get(voItems[i].getInvbas());
      if (sRetailMeas == null) {
        noMeas.add(((InvVO) alinv.get(0)).getInvcode());
        continue;
      }

      // 主单位
      sMainMeas = ((InvVO) alinv.get(0)).getPk_measdoc();

      if (sRetailMeas.equals(sMainMeas)) {

        voItems[i].setRetailNum(voItems[i].getMainNum());
      } else if (sRetailMeas.equals(voItems[i].getAstMeas())) {

        voItems[i].setRetailNum(voItems[i].getAstNum());

      } else {
        boolean isfind = false;
        for (int j = 0; j < alinv.size(); j++) {
          InvVO voInv = (InvVO) alinv.get(j);
          if (voInv.getCassistunitid() != null && voInv.getCassistunitid().equals(sRetailMeas)) {
            voItems[i].setRetailNum(voItems[i].getMainNum().div(voInv.getMainmeasrate()));
            isfind = true;
            break;
          }
        }
        if (!isfind) {
          noHsl.add(((InvVO) alinv.get(0)).getInvcode());
          continue;
        }
      }

      voItems[i].setRetailMeas(sRetailMeas);
    }

    // 异常处理
    if (noInv.size() > 0 || noMeas.size() > 0 || noHsl.size() > 0) {
      String err = "";
      if (noInv.size() > 0) {
        err = "以下ID的存货不存在:" + noInv.toString() + "\r\n";
      }
      if (noMeas.size() > 0) {
        err = err + "以下存货的零售单位不正确(零售价目表定义可能存在问题):" + noMeas.toString() + "\r\n";
      }
      if (noHsl.size() > 0) {
        err = err + "以下存货的主单位和零售单位之间没有定义换算关系:" + noHsl.toString() + "\r\n";
      }
      throw new BusinessException(err);
    }
  }
  public static void convertRetailMeas(IMeasField[] voItems) throws BusinessException {
    if (voItems == null || voItems.length == 0) return;

    java.util.HashSet<String> hm = new java.util.HashSet<String>();
    for (int i = 0; i < voItems.length; i++) {
      hm.add(voItems[i].getInvbas());
    }

    String[] invids = new String[hm.size()];
    hm.toArray(invids);

    HashMap hmData = queryInvVos(invids);

    UFDouble udTmpNum = null;
    String sTmp = null;
    UFDouble one = new UFDouble(1);
    ArrayList alinv = null;
    // 无存货信息的存货的ID
    ArrayList<String> noInv = new ArrayList<String>();
    // 非主辅计量管理,主单位和辅单位不一致
    ArrayList<String> errMeas = new ArrayList<String>();
    for (int i = 0; i < voItems.length; i++) {
      alinv = (ArrayList) hmData.get(voItems[i].getInvbas());
      if (alinv == null || alinv.size() == 0) {
        noInv.add(((InvVO) alinv.get(0)).getInvcode());
        continue;
      }

      udTmpNum = voItems[i].getRetailNum();
      sTmp = voItems[i].getRetailMeas();
      for (int j = 0; j < alinv.size(); j++) {
        InvVO voInv = (InvVO) alinv.get(j);
        // 无零售单位, 零售单位和主单位一致 ,按照主单位、数量
        if (sTmp == null || sTmp.equals(voInv.getPk_measdoc())) {

          // 非辅单位管理
          if (voInv.getAssistunit() == null || !(voInv.getAssistunit().booleanValue())) {
            voItems[i].setMainMeas(voInv.getPk_measdoc());
            voItems[i].setMainNum(udTmpNum);
            break;
          } else {
            voItems[i].setMainMeas(voInv.getPk_measdoc());
            voItems[i].setMainNum(udTmpNum);
            voItems[i].setAstMeas(voInv.getPk_measdoc());
            voItems[i].setAstNum(udTmpNum);
            voItems[i].setHsl(one);

            break;
          }
        } else {
          // 非辅单位管理,零售单位不等于主单位,属于错误数据
          if (voInv.getAssistunit() == null || !(voInv.getAssistunit().booleanValue())) {
            errMeas.add(voInv.getInvcode());
            continue;
          } // 辅单位和零售单位一致,计算出主单位和换算率
          else if (voInv.getCassistunitid().equals(sTmp)) {
            voItems[i].setMainMeas(voInv.getPk_measdoc());
            voItems[i].setMainNum(udTmpNum.multiply(voInv.getMainmeasrate()));
            voItems[i].setAstMeas(sTmp);
            voItems[i].setAstNum(udTmpNum);
            voItems[i].setHsl(voInv.getMainmeasrate());

            break;
          }
        }
      }
    }

    // 异常处理
    if (noInv.size() > 0 || errMeas.size() > 0) {
      String err = "";
      if (noInv.size() > 0) {
        err = "以下ID的存货不存在:" + noInv.toString() + "\r\n";
      }
      if (errMeas.size() > 0) {
        err = err + "非辅单位管理的存货,零售单位须和主单位一致:" + errMeas.toString() + "\r\n";
      }
      throw new BusinessException(err);
    }
  }