Esempio n. 1
0
  /**
   * 此处插入方法说明。 功能描述: 自动将部门的条件变成包含所有下级部门 逻辑: 满足条件: 1- ConditionVO中包含 "部门"或“部门档案”项,而且存在PK值 返回值: 处理后的VO
   * 异常处理: 日期: 2003-09-05 谢高兴 输入参数:
   *
   * @param condvo nc.vo.pub.query.ConditionVO[]
   * @param String[] saPk_corp 需查的所有公司 处理逻辑: 1.先返回所有需要处理的项 2.然后将每个项生成相应的需要替换的VO列表 3.最后替换原来对应的项
   *     <p>修改时间:2007-8-21 修改人:张成 修改内容:增加对销售组织树型结构的支持-自动将销售组织的条件变成包含所有下级销售组织
   */
  public nc.vo.pub.query.ConditionVO[] getTotalSubPkVO(
      nc.vo.pub.query.ConditionVO[] condvo, String[] saPk_corp) throws Exception {
    int lenold;
    int lennew;

    lenold = condvo.length;
    if (lenold <= 0) {
      return condvo;
    }

    // 是否有部门项
    String sCurPk = null;
    boolean flag = false;
    ArrayList rowdept = new ArrayList();
    Integer newint;
    for (int i = 0; i < lenold; i++) {
      if ((condvo[i].getFieldName() != null)
          && (condvo[i].getFieldName().equals("部门")
              || condvo[i].getFieldName().equals("部门档案")
              || condvo[i].getFieldName().equals("销售组织") // v5.02增加
              // by
              // zhangcheng
              || condvo[i].getFieldName().indexOf("地区分类") >= 0 // v5.02增加
          // by
          // zhangcheng
          )
          && (("=".equals(condvo[i].getOperaCode()))
              || ("like".equals(condvo[i].getOperaCode()))
              || ("LIKE".equals(condvo[i].getOperaCode())))) {
        sCurPk = condvo[i].getValue();
        if (sCurPk != null && sCurPk.length() > 0) {
          newint = new Integer(i);
          rowdept.add(newint);
          flag = true;
        }
      }
    }

    if (!flag) {
      return condvo;
    }

    String[] sRetPk;
    // 包含所有子项的List
    ArrayList arAll = new ArrayList();
    for (int j = 0; j < rowdept.size(); j++) {
      // 单个项的List
      ArrayList arPer = new ArrayList();
      // 取下级部门的ID
      int rowindex = ((Integer) rowdept.get(j)).intValue();
      // sCurPk = condvo[rowindex].getValue();
      // 加入判断 避免空指针异常
      if (null != condvo[rowindex].getRefResult())
        sCurPk = condvo[rowindex].getRefResult().getRefPK();
      else sCurPk = NCLangResOnserver.getInstance().getStrByID("scmpub", "UPPscmpub-000054") /*
					 * @res
					 * "无效的输入!"
					 */;

      String sCurName;
      if (condvo[rowindex].getRefResult() != null) // 加入判断,避免抛错 wj
      sCurName = condvo[rowindex].getRefResult().getRefName();
      else sCurName = NCLangResOnserver.getInstance().getStrByID("scmpub", "UPPscmpub-000054") /*
																									 * @res
																									 * "无效的输入!"
																									 */;
      String sRetName[] = null; // modify by zxj

      // v5.02修改,增加对销售组织条件的处理////////////////////
      try {
        ArrayList retArray = null;
        if (("部门档案".equals(condvo[rowindex].getFieldName()))
            || ("部门".equals(condvo[rowindex].getFieldName()))) {
          retArray = getTotalSubPkAndNames(DEPTDOC, sCurPk, sCurName, saPk_corp);
        } else if (("销售组织".equals(condvo[rowindex].getFieldName()))) {
          retArray = getTotalSubPkAndNames(SALESTRU, sCurPk, sCurName, saPk_corp);
        } else if (null != condvo[rowindex].getFieldName()
            && condvo[rowindex].getFieldName().indexOf("地区分类") >= 0) {
          retArray = getTotalSubPkAndNames(AREACL, sCurPk, sCurName, saPk_corp);
        }
        sRetPk = (String[]) retArray.get(0);
        sRetName = (String[]) retArray.get(1);
      } catch (Exception e) {
        nc.vo.scm.pub.SCMEnv.out(e);
        /** <needn't ??> */
        sRetPk = null;
      }
      // v5.02修改////////////////////////////////////////

      // 如果只有原来一个值,则不进行替换
      if (sRetPk == null || sRetPk.length <= 1) {
        arAll.add(null);
        continue;
      }
      nc.vo.pub.query.ConditionVO vo;
      for (int i = 0; i < sRetPk.length; i++) {
        vo = new nc.vo.pub.query.ConditionVO();
        vo.setDataType(condvo[rowindex].getDataType());
        vo.setDirty(condvo[rowindex].isDirty());
        vo.setFieldCode(condvo[rowindex].getFieldCode());
        vo.setFieldName(condvo[rowindex].getFieldName());
        vo.setOperaCode(condvo[rowindex].getOperaCode());
        vo.setOperaName(condvo[rowindex].getOperaName());
        vo.setTableCode(condvo[rowindex].getTableCodeForMultiTable());
        vo.setTableName(condvo[rowindex].getTableNameForMultiTable());
        vo.setValue(sRetPk[i]);
        // modify by zxj
        nc.vo.pub.query.RefResultVO refresultvo = new nc.vo.pub.query.RefResultVO();
        refresultvo.setRefPK(sRetPk[i]);
        refresultvo.setRefName(sRetName[i]);
        vo.setRefResult(refresultvo);
        //

        // 关系操作设置位or
        vo.setLogic(false);
        // 第一个设置左括号,最后一个设置右括号
        if (i == 0) {
          vo.setNoLeft(false);
          // 如果原来有左括号,则设置为and
          if (!condvo[rowindex].getNoLeft()) {
            vo.setLogic(true);
          } else {
            vo.setLogic(condvo[rowindex].getLogic());
          }
        } else if (i == sRetPk.length - 1) {
          vo.setNoRight(false);
        }
        arPer.add(vo);
      }
      // 如果原来有左括号
      if (!condvo[rowindex].getNoLeft()) {
        vo = new nc.vo.pub.query.ConditionVO();
        // vo.setDataType(condvo[rowindex].getDataType());
        // 都设置为整数,最后的条件合成为1=1 如果是字符串合成是1='1'可能在其他的数据库中为非法
        vo.setDataType(1);
        vo.setFieldCode("1");
        vo.setOperaCode("=");
        vo.setValue("1");
        vo.setLogic(condvo[rowindex].getLogic());
        vo.setNoLeft(false);
        arPer.add(0, vo);
      }
      // 如果原来有右括号
      if (!condvo[rowindex].getNoRight()) {
        vo = new nc.vo.pub.query.ConditionVO();
        // vo.setDataType(condvo[rowindex].getDataType());
        vo.setDataType(1);
        vo.setFieldCode("1");
        vo.setOperaCode("=");
        vo.setValue("1");
        vo.setLogic(true);
        vo.setNoRight(false);
        arPer.add(vo);
      }

      arAll.add(arPer);
    }

    // 合成最后的List
    ArrayList arRes = new ArrayList();

    // 先复制原来的数组到list
    for (int i = 0; i < lenold; i++) {
      arRes.add(condvo[i]);
    }
    // 从后往前复制
    for (int j = rowdept.size() - 1; j >= 0; j--) {
      int rowindex = ((Integer) rowdept.get(j)).intValue();
      ArrayList arPer = (ArrayList) arAll.get(j);
      if (arPer == null) {
        continue;
      }
      arRes.remove(rowindex);
      if (rowindex >= arRes.size()) {
        // 从最后顺序增加
        for (int k = 0; k < arPer.size(); k++) {
          arRes.add(arPer.get(k));
        }
      } else {
        // 反着从中间插入
        for (int k = arPer.size() - 1; k >= 0; k--) {
          arRes.add(rowindex, arPer.get(k));
        }
      }
    }

    int iSize = arRes.size();
    return (nc.vo.pub.query.ConditionVO[]) (arRes.toArray(new nc.vo.pub.query.ConditionVO[iSize]));
  }
  /**
   * @param cvos
   * @param pk_corp
   * @return 根据客户管理id和基本id分别构建两个sql,分别用于构建供应链和财务的sql
   * @throws SQLException
   * @throws BusinessException
   * @throws NamingException
   * @throws SystemException
   */
  private String[] getSql(ConditionVO[] cvos, String pk_corp)
      throws SQLException, BusinessException, SystemException, NamingException {
    HashSet<String> pk_cumandoc = new HashSet();
    HashSet<String> pk_cubasdoc = new HashSet();
    HashSet<String> cproductid = new HashSet();
    HashSet<String> cbiztypeid = new HashSet();

    HashSet<String> newValue;
    String querySql;
    for (ConditionVO cvo : cvos) {
      if (cvo.getFieldCode().equals("pk_cumandoc")
          || cvo.getFieldCode().equals("creditlevel")
          || cvo.getFieldCode().equals("pk_pricegroupcorp")
          || cvo.getFieldCode().equals("pk_areacl")
          || cvo.getFieldCode().equals("pk_salestru")) {
        if (cvo.getFieldCode().equals("pk_cumandoc")) {
          pk_cumandoc.add(cvo.getValue());
        } else {
          if (cvo.getFieldCode().equals("pk_areacl")) {
            querySql =
                "select pk_cumandoc from bd_cumandoc, bd_cubasdoc where bd_cumandoc.pk_cubasdoc=bd_cubasdoc.pk_cubasdoc "
                    + " and custflag in('0','2') and bd_cumandoc.pk_corp='"
                    + pk_corp
                    + "' and pk_areacl "; // 增加custflag 过滤
            if ("like".equals(cvo.getOperaCode())) {
              querySql +=
                  " in (select pk_areacl from bd_areacl where areaclcode like '"
                      + cvo.getRefResult().getRefCode()
                      + "%')";
            } else {
              querySql += "='" + cvo.getValue() + "'";
            }
          } else {
            querySql =
                "select pk_cumandoc from bd_cumandoc where "
                    + cvo.getFieldCode()
                    + "='"
                    + cvo.getValue()
                    + "'";
          }
          newValue = queryNewValue(querySql);
          if (newValue.isEmpty())
            throw new BusinessException(
                nc.bs.ml.NCLangResOnserver.getInstance()
                    .getStrByID(
                        "scmsocredit",
                        "UPPSCMSOCredit-000292",
                        null,
                        new String[] {cvo.getFieldName()}) /*
						 * @res
						 * "所选{0}中没有相匹配的客户!"
						 */);
          updateValue(pk_cumandoc, newValue);
        }
      } else if (cvo.getFieldCode().equals("cproductid")) {
        cproductid.add(cvo.getValue());
      } else if (cvo.getFieldCode().equals("cbiztypeid")) {
        cbiztypeid.add(cvo.getValue());
      }
    } // end for

    pk_cumandoc = findAllForwardCust(pk_cumandoc, pk_corp);
    fillPkCubas(pk_cumandoc, pk_cubasdoc);

    String[] results = new String[2];
    results[0] = buildSql(pk_cumandoc, cproductid, cbiztypeid, "temp_so_forminsql001");
    results[1] = buildSql(pk_cubasdoc, cproductid, cbiztypeid, "temp_so_forminsql002");

    return results;
  }