⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ducts.java

📁 java 读写EXCEL文件的源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    finally {
      if (rset != null)
        try {rset.close();} catch(SQLException ignore) {}
      if (stmt != null)
        try {stmt.close();} catch(SQLException ignore) {}
    }
    return intCableCount;
  }
  /**获取起始或终止管孔中缆线占用信息量多的一方 Vector*/
  public Vector createMaxCableDucts(JLabel jLabel1){
    Vector vMaxCableDucts = null;
    Vector vStartDucts = null;
    Vector vEndDucts = null;
    int intStartDuctCableCount = 0;
    int intEndDuctCableCount = 0;

    vStartDucts = getStartDucts();  //获取起始管孔
    vEndDucts = getEndDucts();      //获取终止管孔
//System.out.println("起始管孔数量:" + vStartDucts.size() + "===终止管孔数量:" + vEndDucts.size());
    intStartDuctCableCount = getStartDuctCableCount(vStartDucts);
    intEndDuctCableCount = getEndDuctCableCount(vEndDucts);
    //由于 起始和终止的管孔不能调换,所以要分别处理
    if (intStartDuctCableCount > intEndDuctCableCount){
      vMaxCableDucts = vStartDucts;
      //平移管孔坐标到左下角
      moveDuctsParalleCoord(vMaxCableDucts);
      //生成起始中间表的“管道表”
      creatStartMiddleDuctTable(vMaxCableDucts,jLabel1);
    }else{
      vMaxCableDucts = vEndDucts;
      //平移管孔坐标到左下角
      moveDuctsParalleCoord(vMaxCableDucts);
      //生成 终止中间表的“管道表”
      creatEndMiddleDuctTable(vMaxCableDucts,jLabel1);
    }
    //返回结果
    return vMaxCableDucts;
  }

  /**建立 起始端 中间表的管道表*/
  private void  creatStartMiddleDuctTable(Vector vDucts,JLabel jLabel1){
    int i;
    String strDuctCode;
    double dblMaxX=0,dblMaxY=0;
    double dblX,dblY;            //管孔坐标
    String strStartX,strStartY;  //起始X,Y
    String strEndX,strEndY;      //终止X,Y

    //根据管孔编号,获取 同一个所属管道编码的所有管孔的最大X,Y
    DuctEntity oMaxDuctEntity = getHighestCoord(vDucts);
    dblMaxX = oMaxDuctEntity.getX();
    dblMaxY = oMaxDuctEntity.getY();

    //终止断面坐标计算方法  起始断面坐标
    for(i=0;i<vDucts.size();i++){
      DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
      dblX = oDuctEntity.getX();
      dblY = oDuctEntity.getY();

      oDuctEntity.setStartX(dblX);
      oDuctEntity.setStartY(dblMaxY - dblY);
      oDuctEntity.setEndX(dblMaxX - dblX);
      oDuctEntity.setEndY(dblMaxY - dblY);
    }
    creatMiddleDuctTable(vDucts,jLabel1);
  }
  /**建立 终止端 中间表的管道表*/
  private void  creatEndMiddleDuctTable(Vector vDucts,JLabel jLabel1){
    int i;
    String strDuctCode;
    double dblMaxX=0,dblMaxY=0;
    double dblX,dblY;            //管孔坐标
    String strStartX,strStartY;  //起始X,Y
    String strEndX,strEndY;      //终止X,Y

      //根据管孔编号,获取 同一个所属管道编码的所有管孔的最大X,Y
      DuctEntity oMaxDuctEntity = getHighestCoord(vDucts);
      dblMaxX = oMaxDuctEntity.getX();
      dblMaxY = oMaxDuctEntity.getY();

      //终止断面坐标计算方法  起始断面坐标
      strStartX = Double.toString(dblMaxX) + "-X";
      strStartY = Double.toString(dblMaxY) + "-Y";
      strEndX   = "X";
      strEndY   = Double.toString(dblMaxY) + "-Y";

      for(i=0;i<vDucts.size();i++){
        DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
        dblX = oDuctEntity.getX();
        dblY = oDuctEntity.getY();

        oDuctEntity.setStartX(dblX);
        oDuctEntity.setStartY(dblMaxY - dblY);
        oDuctEntity.setEndX(dblMaxX - dblX);
        oDuctEntity.setEndY(dblMaxY - dblY);
      }
    creatMiddleDuctTable(vDucts,jLabel1);
  }
  /**建立 中间表的管道表*/
  private void  creatMiddleDuctTable(Vector vDucts,JLabel jLabel1){
    int i;
    String strDuctCode;
    double dblMaxX=0,dblMaxY=0;
    double strStartX,strStartY,strEndX,strEndY;
    DuctEntity oDuctEntity = null;

    Statement stmt = null;
    try{
      stmt = conn.createStatement();
      //根据数组的管孔编号,查询PCDM的“管孔”表
      for(i=0;i<vDucts.size();i++){
        try {
              oDuctEntity = (DuctEntity)vDucts.elementAt(i);
              strDuctCode = oDuctEntity.getDuctCode();
              strStartX   = oDuctEntity.getStartX();
              strStartY   = oDuctEntity.getStartY();
              strEndX   = oDuctEntity.getEndX();
              strEndY   = oDuctEntity.getEndY();
          //生成中间表的“管道”表,单面
          strSql = "Insert Into " + strTargetDBName + ".I_管道(" +
                   "管道编码,起始断面坐标X,起始断面坐标Y,终止断面坐标X,终止断面坐标Y," +
                   "起始人井展开图坐标X,起始人井展开图坐标Y,终止人井展开图坐标X,终止人井展开图坐标Y," +
                   "所属管道段编码,管径,管料,管道状态,规格型号,设施状态," +
                   "建设单位,数据采集单位,数据采集人,数据采集日期,备注" +
                   ") Select " +
                   "管孔编码," + strStartX + "," + strStartY + "," + strEndX + "," + strEndY + "," +
                   "0,0,0,0," +
                   "所属管道段编码,管径,管材,管孔状态,规格型号,'竣工'," +
                   "建设单位,数据采集单位,数据采集人,数据采集日期,备注" +
                   " From " + strSourceDBName + ".GK_T" +
                   " Where 管孔编码='" + strDuctCode + "'";
//测试
//System.out.println(strSql);
         jLabel1.setText("生成管孔管道断面坐标:"+strStartX+","+strStartY+","+strEndX+","+strEndY);
          stmt.execute(strSql);
         }catch(SQLException e) {
          //System.out.println("Insert SQL error: " + e.toString());
          //System.out.println(strSql);
          oErrorInfoExcel.writeExcelRow(e.toString(),strSql);
        }catch(NullPointerException nulle){
          Debug.print(nulle.toString());
          oErrorInfoExcel.writeExcelRow(nulle.toString(),strSql);
        }
      }
      stmt.close();
      stmt = null;
    }catch(SQLException e) {
      Debug.print("SQL error: " + e.toString());
    }
    finally {
      if (stmt != null)
        try {stmt.close();} catch(SQLException ignore) {}
    }
  }
  /**获取 截面矩形 最大的X 和 最大的Y*/
  private DuctEntity getHighestCoord(Vector vDucts){
    DuctEntity oReturnDuctEntity = null;
    DuctEntity oDuctEntity = null;
    String strDuctCode;
    double dblMaxX=0,dblMaxY=0;
    int i;
    if (vDucts.size()>0){
      //获取第一个管孔作为比较的起点
      oDuctEntity = (DuctEntity)vDucts.elementAt(0);
      dblMaxX = oDuctEntity.getX();
      dblMaxY = oDuctEntity.getY();
    }
    //构造一个管孔实体对象,用于返回
    oReturnDuctEntity = new DuctEntity("test",dblMaxX,dblMaxY);
    for (i=0;i<vDucts.size();i++){
      oDuctEntity = (DuctEntity)vDucts.elementAt(i);
      //先比较X,后比较Y
      if(oDuctEntity.getX() > dblMaxX){
        dblMaxX = oDuctEntity.getX();
      }
      if(oDuctEntity.getY() > dblMaxY){
        dblMaxY = oDuctEntity.getY();
      }
    }
    dblMaxX = dblMaxX + 45;
    dblMaxY = dblMaxY + 45;
    oReturnDuctEntity.setX(dblMaxX);
    oReturnDuctEntity.setY(dblMaxY);
    return oReturnDuctEntity;
  }
  /**获取 截面矩形最左下角的(X,Y)*/
  private DuctEntity getLowestCoord(Vector vDucts){
    DuctEntity oReturnDuctEntity = null;
    DuctEntity oDuctEntity = null;
    String strDuctCode;
    double dblLowX=0,dblLowY=0;
    int i;

    if (vDucts.size()>0){
      //获取第一个管孔作为比较的起点
      oDuctEntity = (DuctEntity)vDucts.elementAt(0);
      dblLowX = oDuctEntity.getX();
      dblLowY = oDuctEntity.getY();
    }
    //构造一个管孔实体对象,用于返回
    oReturnDuctEntity = new DuctEntity("test",dblLowX,dblLowY);
    for (i=0;i<vDucts.size();i++){
      oDuctEntity = (DuctEntity)vDucts.elementAt(i);
      //先比较X,后比较Y
      if(oDuctEntity.getX() < dblLowX){
        dblLowX = oDuctEntity.getX();
      }
      if(oDuctEntity.getY() < dblLowY){
        dblLowY = oDuctEntity.getY();
      }
    }
    oReturnDuctEntity.setX(dblLowX);
    oReturnDuctEntity.setY(dblLowY);
    return oReturnDuctEntity;
  }
  /**根据 最左下角的管孔的向量 平移所有管孔*/
  private void  moveDuctsParalleCoord(Vector vDucts){
    double dblOldX,dblOldY;  //左下角管孔的原来坐标
    double dblXLen,dblYLen;  //平移的向量
    double dblNewX,dblNewY;  //管孔的新坐标
    String strDuctCode;      //管孔编码
    DuctEntity oFirstDuctEntity = null;

    //获取 截面矩形最左下角的(X,Y)
    oFirstDuctEntity = getLowestCoord(vDucts);
    //移到管道段截面的左下角
    dblOldX = 45;
    dblOldY = 45;
    dblXLen = oFirstDuctEntity.getX() - dblOldX;
    dblYLen = oFirstDuctEntity.getY() - dblOldY;
    /*平移所有管孔*/
    int i;
    for (i=0;i<vDucts.size();i++){
      try {
        DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
        strDuctCode = oDuctEntity.getDuctCode();
        dblNewX = oDuctEntity.getX() - dblXLen;
        dblNewY = oDuctEntity.getY() - dblYLen;
        oDuctEntity.setX(dblNewX);
        oDuctEntity.setY(dblNewY);
      }catch (Exception e){
        Debug.print("平移管孔" + e.toString());
      }
    }
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -