ElectLock_Monitor/src/com/dev/lock/comm/Lock_Task_SQL.java
@@ -8,8 +8,11 @@
import com.base.Com;
import com.dev.lock.data.ElectLock_AuthIdcard;
import com.dev.lock.data.ElectLock_Bl;
import com.dev.lock.data.ElectLock_ComBase;
import com.dev.lock.data.ElectLock_Ctl_Log;
import com.dev.lock.data.ElectLock_Inf;
import com.dev.lock.data.ElectLock_Report;
import com.dev.lock.data.ElectLock_State;
import com.sql.MysqlConnPool;
import com.sql.Sql_Mysql;
@@ -25,8 +28,12 @@
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(res.next()) {
            state.setLock_state(res.getInt("lock_state"));
            state.setComm_count(res.getInt("comm_count"));            //'通信计数',
            state.setErr_tol_count(res.getInt("err_tol_count"));      //'总错误计数',
            System.out.println("lock_state:" +state.getLock_state());
         }else {
            sql.sqlMysqlExecute(sql_str_ins);
         }
@@ -60,7 +67,7 @@
                  ",comm_count = " +  state.getComm_count() +
                  ",err_tol_count = " +  state.getErr_tol_count() +
                  ",err_count = " + state.getErr_count() +
                  " WHERE lock_id = " + lock_id;
                  " WHERE lock_id = " + state.getLock_id();
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
@@ -77,10 +84,17 @@
    * @param lock_id
    * @param state
    */
   public static void updateLock_Inf_Table(MysqlConnPool pool,int lock_id,ElectLock_State state) {
   public static void updateLock_Inf_Table(MysqlConnPool pool,ElectLock_Inf inf,ElectLock_State state) {
      String sql_str = "UPDATE " + Sql_Mysql.Lock_Inf_Table + 
                  " Set lock_state = " +  state.getLock_state() +
                  " WHERE lock_id = " + lock_id;
                  " ,lock_online =  " + ((state.getErr_count() > 4)?0:1) +
//                  " ,lock_online =  " + state.getLock_online() +
                  " ,lock_mac =  '" + state.getLockMacAddr() + "'" +
                  " ,bl_state =  '" + state.getBluetooth_state() + "'" +
                  " ,lock_open_count =  " + state.getLock_open_count() +
                  " ,model =  " + state.getWorkmodel() +
                  " ,last_update_time = '" + Com.getDateTimeFormat(state.getLast_update_time(), Com.DTF_YMDhms) + "'" +
                  " WHERE lock_id = " + inf.getLock_id();
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
@@ -99,17 +113,29 @@
    * @param param
    */
   public static void queryElectLockControlCmd(MysqlConnPool pool,int lock_id,ElectLock_State param) {
      String sql_str =  " SELECT op_cmd,id_card_set,lock_addr_set "
      String sql_str =  " SELECT op_cmd,id_card_set,lock_addr_set,ctl_uname,lock_id "
                  + " FROM " + Sql_Mysql.Lock_Rt_Table + ""
                  + " WHERE lock_id = " + lock_id;
                  + " WHERE FLOOR(lock_id/10000) = " + (lock_id/10000)
                  + " AND ("
                  + " op_cmd = " + ElectLock_ComBase.CMD_ClearIdCard
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_REMOTE_OPEN_Lock
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_REMOTE_ReStart
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_AddIdCard
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_RemoveIdCard
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_OpenBluetooth
                  + " OR op_cmd = " + ElectLock_ComBase.CMD_CloseBluetooth
                  + " )";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str);
         if(res.next()) {
            //当前需要控制的锁具ID
            param.setLock_id(res.getInt("lock_id"));
            param.setOp_cmd(res.getInt("op_cmd"));
            param.setId_card_set(res.getInt("id_card_set"));
            param.setLock_addr_set(res.getInt("lock_addr_set"));
            param.setCtl_uname(res.getString("ctl_uname"));
            
         }
      } catch (SQLException e) {
@@ -136,7 +162,7 @@
   public static void updateElectLockControlCmd(MysqlConnPool pool, int lock_id, ElectLock_State state) {
      String sql_str = "UPDATE " + Sql_Mysql.Lock_Rt_Table + 
            " Set op_cmd =  " + state.getOp_cmd() +
            " WHERE lock_id = " + lock_id;
            " WHERE lock_id = " + state.getLock_id();
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
@@ -156,12 +182,13 @@
    */
   public static void insertLock_Ctl_Log_Table(MysqlConnPool pool,ElectLock_Ctl_Log log) {
      String sql_str_ins = "INSERT INTO "  + Sql_Mysql.Lock_Ctl_Log_Table +  ""
                     + "   (lock_id,ctl_type,ctl_result,ctl_time,ctl_id_card) VALUES("
                     + "   (lock_id,ctl_type,ctl_result,ctl_time,ctl_id_card,ctl_uname) VALUES("
                     + "" + log.lock_id
                     + "," + log.ctl_type + ""
                     + "," + log.ctl_result + ""
                     + ",'" + Com.getDateTimeFormat(log.ctl_time, Com.DTF_YMDhms) + "'"
                     + "," + log.ctl_id_card + ""
                     + ",'" + log.ctl_uname + "'"
                     + ");";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
@@ -176,7 +203,7 @@
   public static List<ElectLock_AuthIdcard> queryAuth_Idcard_Table(MysqlConnPool pool, int client_id) {
      List<ElectLock_AuthIdcard> batch_auth = new ArrayList<>();
      String sql_str = "SELECT DISTINCT(tb_key_inf.key_id),lock_id,state,tb_auth_idcard.create_time,key_number " +
      String sql_str = "SELECT DISTINCT(tb_key_inf.key_id),lock_id,state,tb_auth_idcard.create_time,key_number,ctl_uname " +
                  " FROM " + Sql_Mysql.Key_Inf_Table + "," + Sql_Mysql.Auth_Idcard_Table +
                  " WHERE tb_key_inf.key_id = tb_auth_idcard.key_id AND lock_id = " + client_id + " AND key_type = 1 ";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
@@ -190,6 +217,8 @@
            auth.state = res.getInt("state");               //'1:移除id卡,2添加id卡,3已处理',
            auth.create_time = res.getTimestamp("create_time");   //'创建时间'
            auth.key_number = res.getString("key_number");      //ID卡号
            auth.ctl_uname = res.getString("ctl_uname");      //操作人姓名
            
            batch_auth.add(auth);
         }
@@ -236,4 +265,375 @@
         sql.close_con();
      }
   }
   /**
    *    查询ID钥匙的归属人姓名
    * @param pool
    * @param client_id
    * @param last_unlock_id
    * @return
    */
   public static String queryKeyInfByKeyNumberTable(MysqlConnPool pool, int keyNumber) {
      String uname = "";
      String sql_str =  " SELECT * FROM " + Sql_Mysql.Key_Inf_Table
                  + " WHERE key_number = " + keyNumber;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         //System.out.println("====="+sql_str);
         res = sql.sqlMysqlQuery(sql_str);
         if(res.next()) {
            uname = res.getString("uname");
            //System.out.println("uname:" + uname);
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
      return uname;
   }
   public static void updateProcess_StartTime(MysqlConnPool pool, double mVersionnum) {
      String sql_str = "UPDATE " + Sql_Mysql.Process_Survey_Table +
            " Set Process_starttime = NOW()  " +
            " ,ProcessTime = NOW() " +
            " ,ProcessVersion = 'V" + mVersionnum + "'"+
            " WHERE ProcessId = 11001";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         sql.close_con();
      }
   }
   public static void updateProcess_ProcessTime(MysqlConnPool pool) {
      String sql_str = "UPDATE " + Sql_Mysql.Process_Survey_Table +
            " Set ProcessTime = NOW() " +
            " WHERE ProcessId = 11001";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         sql.close_con();
      }
   }
   public static void queryLock_Rt_TableByLockId(MysqlConnPool pool,int lock_id,ElectLock_State state) {
      String sql_str = " SELECT * FROM " + Sql_Mysql.Lock_Rt_Table + " WHERE lock_id = " + lock_id;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str);
         if(res.next()) {
            state.setGprs_sn(res.getString("gprs_sn"));               //'gprs模块SN码',
            state.setClient_ip(res.getString("client_ip"));            //'设备IP地址',
            state.setAlready_id_count(res.getInt("already_id_count"));   //'当前锁已授权卡数量',
            state.setMax_id_count(res.getInt("max_id_count"));         //'授权卡数量存储上限',
            state.setLock_state(res.getInt("lock_state"));            //'电子锁状态[0-关 1-开]',
            state.setLock_version(res.getString("lock_version"));      //'软件版本号',
            state.setUnlock_type(res.getInt("unlock_type"));         //'上一次开锁方式[0-485开锁 1-刷卡开锁 2-蓝牙开锁 3-DI开锁]',
            state.setUnlock_id(res.getInt("unlock_id"));            //'上一次刷开开锁卡号[仅刷开开锁时有效]',
            state.setLock_addr(res.getInt("lock_addr"));            //'设备地址',
            state.setComm_count(res.getInt("comm_count"));            //'通信计数',
            state.setErr_tol_count(res.getInt("err_tol_count"));      //'总错误计数',
//            state.setErr_count(res.getInt("err_count"));            //'连续错误计数',
            state.setOp_cmd(res.getInt("op_cmd"));                  //'控制命令',
            state.setId_card_set(res.getLong("id_card_set"));         //'授权ID卡号',
            state.setLock_addr_set(res.getInt("lock_addr_set"));;      //'设置设备地址[慎用]',
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
   }
   public static void queryLock_Report_TableByLockId(MysqlConnPool pool,int lock_id,ElectLock_Report state,int now_year) {
      String sql_str = " SELECT * FROM " + Sql_Mysql.Lock_Report_Table + " WHERE lock_id = " + lock_id + " AND record_year = " + now_year;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str);
         if(res.next()) {
            state.record_year = res.getInt("record_year");      //统计年份',
            state.month1 = res.getInt("month1");         //1月开锁次数',
            state.month2 = res.getInt("month2");         //2月开锁次数',
            state.month3 = res.getInt("month3");         //3月开锁次数',
            state.month4 = res.getInt("month4");         //4月开锁次数',
            state.month5 = res.getInt("month5");         //5月开锁次数',
            state.month6 = res.getInt("month6");         //6月开锁次数',
            state.month7 = res.getInt("month7");         //7月开锁次数',
            state.month8 = res.getInt("month8");         //8月开锁次数',
            state.month9 = res.getInt("month9");         //9月开锁次数',
            state.month10 = res.getInt("month10");         //10月开锁次数',
            state.month11 = res.getInt("month11");         //11月开锁次数',
            state.month12 = res.getInt("month12");         //12月开锁次数',
            state.quarter1 = res.getInt("quarter1");      //第一季度开锁次数',
            state.quarter2 = res.getInt("quarter2");      //第二季度开锁次数',
            state.quarter3 = res.getInt("quarter3");      //第三季度开锁次数',
            state.quarter4 = res.getInt("quarter4");      //第四季度开锁次数',
            state.year_count = res.getInt("year_count");      //本年开锁次数',
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
   }
   /**
    *    当平台锁具模式未配置时返回-1
    *    返回0-离线模式   1-在线模式
    * @param pool
    * @return
    */
   public static int querySystemLockMode(MysqlConnPool pool) {
      int sys_model = -1;
      String sql_str_sel = "SELECT plate_model FROM " + Sql_Mysql.Plate_Info_Table;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(res.next()) {
            sys_model = res.getInt("plate_model");
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
      return sys_model;
   }
   /**
    * 插入远程开锁失败记录
    */
   public static void insertRemoteOpenFailAlarm(MysqlConnPool pool,int lock_id) {
      String sql_str = "INSERT INTO " + Sql_Mysql.Lock_Alm_Temp_Table + "(lock_id,alm_source,alm_start_time) VALUES(" + lock_id + "," + ElectLock_ComBase.ALM_Source_PlatForm + ",NOW());";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         sql.close_con();
      }
   }
   /**
    *    设置当前锁具离线
    * @param pool
    * @param client_id
    */
   public static void updateLock_OffLineTable(MysqlConnPool pool, int client_id) {
      String sql_str = " UPDATE " + Sql_Mysql.Lock_Inf_Table + " SET lock_online = 0 WHERE FLOOR(lock_id/10000) = " + (client_id/10000);
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str);
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         sql.close_con();
      }
   }
   /**
    *    插入默认的ID卡信息
    * @param pool
    * @param client_id
    */
   public static void insertLock_IdCard_Table(MysqlConnPool pool, int lock_id) {
      String sql_str_sel = " SELECT * FROM " + Sql_Mysql.Lock_IdCard_Table + " WHERE lock_id =  " + lock_id;
      String sql_str_ins = " INSERT INTO " + Sql_Mysql.Lock_IdCard_Table + "(lock_id) VALUES(" + lock_id + ");";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(!res.next()) {
            sql.sqlMysqlExecute(sql_str_ins);
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
   }
   /**
    *    插入默认的ID卡信息
    * @param pool
    * @param client_id
    */
   public static void insertLock_Rt_Table(MysqlConnPool pool, int lock_id) {
      String sql_str_sel = " SELECT * FROM " + Sql_Mysql.Lock_Rt_Table + " WHERE lock_id =  " + lock_id;
      String sql_str_ins = " INSERT INTO " + Sql_Mysql.Lock_Rt_Table + "(lock_id) VALUES(" + lock_id + ");";
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(!res.next()) {
            sql.sqlMysqlExecute(sql_str_ins);
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
   }
   /**
    *    更细当前锁具的ID卡
    * @param pool
    * @param client_id
    */
   public static void updateLock_IdCard_Table(MysqlConnPool pool, ElectLock_State state) {
      StringBuffer sql_str = new StringBuffer(" UPDATE " + Sql_Mysql.Lock_IdCard_Table + " SET ");
      for(int k = 0;k<state.getId_cards().length;k++) {
         if(k > 0) {
            sql_str.append(",") ;
         }
         sql_str.append("card" + (k+1) + " = '" + state.getId_cards()[k] + "'") ;
      }
      sql_str.append(" WHERE lock_id =   " + state.getLock_id()) ;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      try {
         sql.sqlMysqlExecute(sql_str.toString());
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         sql.close_con();
      }
   }
   /**
    * 查询当前需要开启蓝牙的计划
    * @param pool
    * @param lock_id
    * @return
    */
   public static ElectLock_Bl queryBluetoothOpenPlan(MysqlConnPool pool,int lock_id) {
      ElectLock_Bl bl = null;
      String sql_str_sel = "SELECT * FROM " + Sql_Mysql.Lock_BL_Table
                     + " WHERE NOW() BETWEEN start_time AND DATE_ADD(start_time,INTERVAL " + ElectLock_ComBase.Lock_BluetoothCheckTimeLong + " SECOND)"
                     + " and type = 1 AND lock_id = " + lock_id;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(res.next()) {
            bl = new ElectLock_Bl();
            bl.setLock_id(lock_id);
            bl.setCreate_time(res.getTimestamp("create_time"));
            bl.setStart_time(res.getTime("start_time"));
            bl.setStop_time(res.getTime("stop_time"));
            bl.setType(res.getInt("type"));
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
      return bl;
   }
   /**
    * 查询当前需要开启蓝牙的计划
    * @param pool
    * @param lock_id
    * @return
    */
   public static ElectLock_Bl queryBluetoothClosePlan(MysqlConnPool pool,int lock_id) {
      ElectLock_Bl bl = null;
      String sql_str_sel = "SELECT * FROM " + Sql_Mysql.Lock_BL_Table
                     + " WHERE NOW() BETWEEN stop_time AND DATE_ADD(stop_time,INTERVAL " + ElectLock_ComBase.Lock_BluetoothCheckTimeLong + " SECOND)"
                     + " and type = 1 AND lock_id = " + lock_id;
      Sql_Mysql sql = new Sql_Mysql(pool.getConn());
      ResultSet res = null;
      try {
         res = sql.sqlMysqlQuery(sql_str_sel);
         if(res.next()) {
            bl = new ElectLock_Bl();
            bl.setLock_id(lock_id);
            bl.setCreate_time(res.getTimestamp("create_time"));
            bl.setStart_time(res.getTime("start_time"));
            bl.setStop_time(res.getTime("stop_time"));
            bl.setType(res.getInt("type"));
         }
      } catch (SQLException e) {
         sql.logger.error(e.toString(),e);
      } finally {
         if(null != res) {
            try {
               res.close();
            } catch (SQLException e) {
               sql.logger.error(e.toString(),e);
            }
         }
         sql.close_con();
      }
      return bl;
   }
}