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

📄 crbtscandb.java

📁 中国联通炫铃业务接口开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
						}
					}
				}
//			}
////			}
//		}.start();
	}
	
	/**组装我们的CRBT然后加到CRBTQueue队列**/
	public static void structCRBT(){
		CRBT crbt = new CRBT();
		crbt.setCraccount_20(craccount_20);
		crbt.setCrid_20(crid_20);
		crbt.setDes_addr_6(des_addr_6);
		crbt.setMobile_number_20(mobile_number_20);
		crbt.setNew_pass_8(new_pass_8);
		crbt.setOld_pass_8(old_pass_8);
		crbt.setOper_id_1(oper_id_1);
		crbt.setPassword_8(password_8);
		crbt.setReceiver_20(receiver_20);
		crbt.setRemark1(remark1);
		crbt.setRemark2(remark2);
		crbt.setRet1_10(ret1_10);
		crbt.setRingName_40(ringName_40);
		crbt.setRingtype_4(ringtype_4);
		crbt.setSendNum(sendNum);
		crbt.setSendTime(sendTime==null||sendTime==""?Util.getCurrentTime():sendTime);
		crbt.setSendtype(sendtype);
		crbt.setSeq_no_10(seq_no_10==null||seq_no_10==""?Util.getSeq_no():seq_no_10);
		crbt.setSou_addr_6(sou_addr_6);
		crbt.setSrcflag_1(srcflag_1);
		crbt.setSrcIpaddr_20(srcIpaddr_20);
		crbt.setSrcPrice_4(srcPrice_4);
		crbt.setType(type);
		crbt.setUser_type_2(user_type_2);
		
		GetCRBTGlobalForUsual.getInstance().add(crbt);
	}
	/**
	 * 启动扫描数据库线程
	 *
	 */
	public static void start(){
        LoggerConstant.log.info("------启动扫描数据库线程");
        while(!datacommon.initCommon()){
        	LoggerConstant.log.info("------数据库初始化失败");
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			LoggerConstant.log.info("------重新初始化数据库");
		}
        LoggerConstant.log.info("------数据库初始化成功!");
        hasInitFlag = true;
        
        /**
         * 以下的两个Timer线程设施最好不要整合在一起,原因是每一次扫描都可能出现CRBT读出或Resp入库阻塞线程的危险,
         * 而造成另一个扫描不能得到及时的进行。
         */
        /** 
         * 扫描RespQueue队列,进行入库 */
        if(timerResp==null)
			timerResp = new Timer(true);
		timerResp.schedule(new TimerTask(){
			public void run(){
				scan();
			}
		}, 1000, 5000);
        /** 
         * 扫描Crbtqueue读出CRBT数据 */
		if(timerCrbt==null)
			timerCrbt = new Timer(true);
		timerCrbt.schedule(new TimerTask(){
			public void run(){
				saveResp();
			}
		}, 1000, 5000);
	}
	public static void stop(){
		if(timerCrbt!=null)
			timerCrbt.cancel();
		timerCrbt = null;
		
		if(timerResp!=null)
			timerResp.cancel();
		timerResp = null;
		
		stopFlag = true;
	}
	
	public static void initDBcommon(){
		if(!hasInitFlag){
			if(datacommon.initCommon()){
				hasInitFlag=true;	
			}
		}
	}
	/**
     * 断开数据库连接
     * @param conn Connection
     */
    public void closeConnectionForCRBT() {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (Exception ex) {
        }
    }
    public void closeConnectionForRESP(){
    	try {
			if(connResp!=null)
				connResp.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    /** 退出系统时如果CRBTQueue队列不为空,则将其中的CRBT数据在数据库中的映射更新为未发送状态 */
	public static boolean backCrbt(){
		while(!hasInitFlag){
			initDBcommon();
		}
		try {
			if(conn==null)
				conn = datacommon.POOL.getConnection();
			while(GetCRBTGlobalForUsual.crbtqueue.size()>0){
				CRBT crbt = (CRBT)GetCRBTGlobalForUsual.crbtqueue.removeNoWait();
				String sql="update " +_TABLENAME+
	        		" e set e.NUMsendFlag=1 where e.VC2Seq_no="+crbt.getSeq_no_10();
	            conn.createStatement().executeQuery(sql);
			}
        }catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        finally {
            if(conn != null) {
                try {
                    conn.close();
                    conn = null;
                }catch (SQLException ex1) {}
            }
        }
        return true;
	}
	
	/** 退出系统时如果RespQueue队列不为空,则将其中的CRBT数据入库 */
	public static boolean backResp(){
		while(!hasInitFlag){
			initDBcommon();
		}
		Statement stmt = null;
        ResultSet rst = null;
    	String sql;
        CRBT temp = null;
		try {
        	if(connResp==null)
        		connResp = datacommon.POOL.getConnection();
            while(GetCRBTGlobalForUsual.respqueue.size()>0){
            	CRBT crbt = (CRBT)GetCRBTGlobalForUsual.respqueue.removeNoWait();
            	temp = crbt;
//            	LoggerConstant.log.info("------从RespQueue队列获取CRBT_Resp成功");
            	
            	/** 以下判断该CRBT是否是由Socket接收到的Test_CRBT,
            	 *  如果是由Socket接收到的Test_CRBT则进行入库,同时在NUMSENDFLAG字段置1,准备由Scan扫描发送*/
            	String remark1 = crbt.getRemark1();//判断是否是由Socket接收的Test信息
            	if (remark1.equalsIgnoreCase("TEST")) {
		            LoggerConstant.sqllog.info("INFO - 由Socket接收到的CRBT数据先执行入库操作");
					sql = "insert  into " +_TABLENAME+
							" (NUMSENDFLAG,VC2TYPE,NUMSENDTYPE,NUMSENDNUM,DATSENDTIME,VC2SOU_ADDR,"+
							"VC2DES_ADDR,VC2SEQ_NO,VC2CRACCOUNT,VC2PASSWORD,VC2CRID,VC2SRCFLAG," +
							"VC2SRCIPADDR,VC2RINGTYPE,VC2OLD_PASS,VC2NEW_PASS,VC2RECEIVER,VC2MOBILE_NUM," +
							"VC2OPER_ID,VC2USER_TYPE,VC2RINGNAME,VC2REMARK1,NUMID) " +
							"values "
							+ "(1,'"+crbt.getType()+"',"+crbt.getSendtype()+","+crbt.getSendNum()+
							",to_date('"+crbt.getSendTime()+"','yyyy-mm-dd hh24:mi:ss'),'"+
							crbt.getSou_addr_6()+"','"+crbt.getDes_addr_6()+"',temp_crbt_send_seqno.nextval,'"
							+crbt.getCraccount_20()+"','"+crbt.getPassword_8()+"','"+crbt.getCrid_20()+
							"','"+crbt.getSrcflag_1()+"','"+crbt.getSrcIpaddr_20()+"','"+crbt.getRingtype_4()+
							"','"+crbt.getOld_pass_8()+"','"+crbt.getNew_pass_8()+"','"+crbt.getReceiver_20()+
							"','"+crbt.getMobile_number_20()+"','"+crbt.getOper_id_1()+"','"
							+crbt.getUser_type_2()+"','"+crbt.getRingName_40()+"','" +
									crbt.getRemark1()+"',temp_crbt_send_seq.nextval) ";
					LoggerConstant.sqllog.info("SQL - "+sql);
	            	connResp.createStatement().executeQuery(sql);
	            	LoggerConstant.sqllog.info("INFO - 接收到的CRBT数据入库成功!");
					break;
				}
            	
            	String seq_no_10_resp = crbt.getSeq_no_10();
            	String command_status_resp_4 = crbt.getCommand_status_resp_4()==null?"":
											crbt.getCommand_status_resp_4();
            	String Status_resp_2 = crbt.getStatus_resp_2()==null?"":
											crbt.getStatus_resp_2();
            	String Craccount_resp_20 = crbt.getCraccount_resp_20()==null?"":
											crbt.getCraccount_resp_20();
            	String Password_resp_8 = crbt.getPassword_resp_8()==null?"":
											crbt.getPassword_resp_8();
            	String Totalnum_resp_4 = crbt.getTotalnum_resp_4()==null?"":
											crbt.getTotalnum_resp_4();
            	String Crid_resp_200 = crbt.getCrid_resp_200()==null?"":
											crbt.getCrid_resp_200();
            	String respTime = crbt.getRespTime()==null||crbt.getRespTime()==""?
            								Util.getCurrentTime():crbt.getRespTime();
            								
            	/** 以下判断数据库中是否有相应的Seq_no,有则执行update操作,无则insert*/
            	boolean hasSeqFlag = false;
            	sql = "select e.VC2seq_no from "+_TABLENAME+" e";
            	stmt = connResp.createStatement();
	            rst = stmt.executeQuery(sql);
	            while(rst.next()){
	            	String seq_no = rst.getString("VC2seq_no");
	            	if(seq_no.equalsIgnoreCase(seq_no_10_resp)){//判断该seq_no_10_resp是否在数据库中有对应项
	            		hasSeqFlag = true;//有则执行update,无则执行insert
	            		rst.close();
	            		rst = null;
	            		break;
	            	}
	            }
	            if(hasSeqFlag){
//	            	LoggerConstant.sqllog.info("INFO - 找到匹配的seq_no,将执行update操作");
	            	sql = "update "
	            		+ _TABLENAME
	            		+ " e set"
	            		+ " e.VC2cmd_stu_resp='"
	            		+ command_status_resp_4
	            		+ "', e.VC2Status_resp='"
	            		+ Status_resp_2
	            		+ "', e.VC2Crac_resp='"
	            		+ Craccount_resp_20
	            		+ "', e.VC2Pass_resp='"
	            		+ Password_resp_8
	            		+ "', e.NUMTotal_resp="
	            		+ Totalnum_resp_4
	            		+ " ,e.VC2Crid_resp='"
	            		+ Crid_resp_200
	            		+ "', e.DATrespTime=to_date('"
	            		+ respTime
	            		+ "','yyyy-mm-dd HH24:mi:ss') where e.VC2seq_no="
	            		+ seq_no_10_resp;
	            }else{
//	            	LoggerConstant.sqllog.info("INFO - 没有找到匹配的seq_no,将执行insert操作");
	            	sql = "insert into "
	            		+ _TABLENAME
	            		+ " (VC2cmd_stu_resp,VC2Status_resp,VC2Crac_resp,"
	            		+ "VC2Pass_resp,NUMTotal_resp,VC2Crid_resp,DATrespTime,VC2seq_no,NUMID) "
	            		+ "values ('" + command_status_resp_4
	            		+ "','" + Status_resp_2 + "','"
	            		+ Craccount_resp_20 + "','"
	            		+ Password_resp_8 + "','"
	            		+ Totalnum_resp_4 + "','"
	            		+ Crid_resp_200 + "',to_date('"
	            		+ respTime
	            		+ "','yyyy-mm-dd HH24:mi:ss'),'"
	            		+ seq_no_10_resp
	            		+ "',temp_crbt_send_seq.nextval) ";
	            }
            	LoggerConstant.sqllog.info("SQL - "+sql);
            	stmt = connResp.createStatement();
            	rst = stmt.executeQuery(sql);
            	rst.close();
            	rst = null;
//            	LoggerConstant.log.info("------Resp插入数据库成功");
            }
		}catch (Exception e) {
//            LoggerConstant.log.info("------Resp插入数据库失败");
            if(temp!=null)
            	GetCRBTGlobalForUsual.getInstance().addResp(temp);
			e.printStackTrace();
			return false;
		} finally {
			if( rst != null ){
				try {
					rst.close();
					rst = null;
				}
				catch (SQLException ex2) {
				}
			}
			if (stmt != null) {
				try {
					stmt.close();
					stmt = null;
				} catch (SQLException ex) {
				}
			}
			if (connResp != null) {
				try {
					connResp.close();
					connResp = null;
				}catch (SQLException ex1) {
				}
			}
		}
		return true;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		while(!datacommon.initCommon()){
        	LoggerConstant.log.info("------数据库初始化失败");
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			LoggerConstant.log.info("------重新初始化数据库");
		}
		for(int i=0;i<30;i++){
//			CrbtScanDB.newQurry(i);
		}
		System.out.println("END!");
	}
	public static synchronized boolean isHasInitFlag() {
		return hasInitFlag;
	}
	public static synchronized void setHasInitFlag(boolean hasInitFlag) {
		CrbtScanDB.hasInitFlag = hasInitFlag;
	}
	public synchronized String getStartTime() {
		return startTime;
	}
	public synchronized void setStartTime(String startTime) {
		this.startTime = startTime;
	}
	public synchronized String getStopTime() {
		return stopTime;
	}
	public synchronized void setStopTime(String stopTime) {
		this.stopTime = stopTime;
	}

}

⌨️ 快捷键说明

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