`

线程示例

 
阅读更多
package com.poson.aspz;

import java.io.File;
import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import com.poson.aspz.db.TranContext;
import com.poson.aspz.util.Config;
import com.poson.aspz.util.Const;
import com.poson.aspz.util.MyLoger;
import com.poson.aspz.util.Util;
import java.net.MalformedURLException;
import ws.clinet.axis2.WebSoapBindingImplServiceCallbackHandler;
import ws.clinet.axis2.WebSoapBindingImplServiceStub;
import java.sql.Connection;
import java.sql.DriverManager;

public class OnTimeCreditIntf  extends Thread
{
	private boolean bSuperUser = false;
	private boolean working = false;
	private String planXMLFileFN = "";
	private String path = "";
	private String staffNo = "";
	private String pswd = "";
	private String staffId = "";
	private String siteId = "";
	private String areaId = "";
	private TranContext myDBTrans = null;
	private String curCreatePZDate = "";
	protected Connection conn;
	
	//private static Log log = LogFactory.getLog(Worker.class);
	//private static MyLoger log = new MyLoger();
	private Logger logger = Logger.getLogger(OnTimeCreditIntf.class);
	public OnTimeCreditIntf() 
	{
	
	}

	public Connection getConnection() {
		try {
			conn = DriverManager.getConnection(Const.CONFIG_XML_DB_URL);
			return conn;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	/**
	 * 建立连接
	 * @param driver
	 * @param url
	 * @param user
	 * @param password
	 * @return
	 */
	public Connection getConnection(String driver, String url, String user, String password) {
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
			return conn;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	
	public List getBJOnTimeCreditIntfSumbit() throws SQLException
	{
		ArrayList list = new ArrayList();
		ResultSet rs = null;
		StringBuffer strSql = new StringBuffer();
		strSql.append(" SELECT TRIM(ORDER_SERIAL_NBR) ORDER_SERIAL_NBR, ");
		strSql.append(" TRIM(OWE_BUSINESS_TYPE_ID) OWE_BUSINESS_TYPE_ID,TRIM(STAFF_ID) STAFF_ID, ");
		strSql.append(" TRIM(SERV_ID) SERV_ID,TO_CHAR(CREATED_DATE, 'yyyymmddhhmmss') CREATED_DATE,TO_CHAR(COMPLETED_DATE, 'yyyymmddhhmmss') COMPLETED_DATE, ");
		strSql.append(" TRIM(STATE) STATE,TO_CHAR(STATE_DATE, 'yyyymmddhhmmss') STATE_DATE,TRIM(PROCESS_COUNT) PROCESS_COUNT, ");
		strSql.append(" TRIM(PRE_SERV_STATE) PRE_SERV_STATE,TRIM(REMARK) REMARK,TRIM(CHARGE) CHARGE,TRIM(BALANCE) BALANCE, ");
		strSql.append(" TRIM(CREDIT) CREDIT,TRIM(OWE_TASK_ITEM_ID) OWE_TASK_ITEM_ID ");
		strSql.append(" FROM A_WORK_ORDER ");
		strSql.append(" WHERE STATE='P0C' AND ROWNUM<500 ORDER BY ORDER_SERIAL_NBR ");
		rs = myDBTrans.executeQuery(strSql.toString());
		while (rs.next()) 
		{
        	HashMap planInfo = new HashMap();
        	planInfo.put("ORDER_SERIAL_NBR",rs.getString("ORDER_SERIAL_NBR"));	
        	planInfo.put("OWE_BUSINESS_TYPE_ID",rs.getString("OWE_BUSINESS_TYPE_ID"));
        	planInfo.put("STAFF_ID",rs.getString("STAFF_ID"));	
        	planInfo.put("SERV_ID",rs.getString("SERV_ID"));
        	planInfo.put("CREATED_DATE",rs.getString("CREATED_DATE"));	
        	planInfo.put("COMPLETED_DATE",rs.getString("COMPLETED_DATE"));	
        	planInfo.put("STATE",rs.getString("STATE"));	
        	planInfo.put("STATE_DATE",rs.getString("STATE_DATE"));	
        	planInfo.put("PROCESS_COUNT",rs.getString("PROCESS_COUNT"));	
        	planInfo.put("PRE_SERV_STATE",rs.getString("PRE_SERV_STATE"));
        	planInfo.put("REMARK",rs.getString("REMARK"));
        	planInfo.put("CHARGE",rs.getString("CHARGE"));
        	planInfo.put("BALANCE",rs.getString("BALANCE"));
        	planInfo.put("CREDIT",rs.getString("CREDIT"));
        	planInfo.put("OWE_TASK_ITEM_ID",rs.getString("OWE_TASK_ITEM_ID"));
			list.add(planInfo);  
		}
        if (rs != null) {
        	rs.close();
        	rs = null;
          }
		return list;
	}

//	public void updateBJOnTimeCreditIntfPlan(String requestId,String serial) throws SQLException
//	{
//		ResultSet rs = null;
//		StringBuffer strSql = new StringBuffer();
//		strSql.append(" UPDATE A_WORK_ORDER SET STATE='P0P',REMARK='处理成功',SERIAL='" + serial + "'");
//		strSql.append(" WHERE ORDER_SERIAL_NBR= " + requestId);
//		rs = myDBTrans.executeQuery(strSql.toString());
//	}

	public void deleteBJOnTimeCreditIntfPlan(String requestId) throws SQLException
	{
		StringBuffer strSql = new StringBuffer();
		strSql.append(" DELETE FROM A_WORK_ORDER ");
		strSql.append(" WHERE ORDER_SERIAL_NBR= " + requestId);
		myDBTrans.doBatch(strSql.toString());
	}
	
	public void  insertBJOnTimeAWorkOrderLog(String requestId,String serial) throws SQLException
	{
		StringBuffer strSql = new StringBuffer();
		strSql.append(" INSERT INTO A_WORK_ORDER_LOG (order_serial_nbr,owe_business_type_id,staff_id, ");
		strSql.append(" serv_id,created_date,completed_date,state,state_date,process_count,pre_serv_state,remark,");
		strSql.append(" tran_manual_date,hd_staff_id,charge,balance,credit,owe_task_item_id,SERIAL) ");
		strSql.append(" select order_serial_nbr,owe_business_type_id,staff_id, " );
		strSql.append(" serv_id,created_date,completed_date,'P0P',sysdate,process_count,pre_serv_state,remark,");
		strSql.append(" null,null,charge,balance,credit,owe_task_item_id,'" +serial + "' from A_WORK_ORDER ");
		strSql.append(" WHERE ORDER_SERIAL_NBR= " + requestId);
		myDBTrans.doBatch(strSql.toString());
	}
	
	public void updateBJOnTimeCreditFailPlan(String requestId,String error, String serial) throws SQLException
	{
		StringBuffer strSql = new StringBuffer();
		strSql.append(" UPDATE A_WORK_ORDER SET STATE='P0E',state_date=sysdate,REMARK='" + error + "',SERIAL='" + serial + "'");
		strSql.append(" WHERE ORDER_SERIAL_NBR= " + requestId);
		myDBTrans.doBatch(strSql.toString());
	}
	
	public OnTimeCreditIntf(String staffNo, String pswd, String path, String planXMLFileFN){
//		if(this.conn == null) {
//			this.conn = this.getConnection();
//			this.conn.setAutoCommit(true);
//		}	
		
		this.staffNo = staffNo;
		this.pswd = pswd;
		this.path = path;
		this.planXMLFileFN = path + File.separator + planXMLFileFN;
		
		// 启动数据库连接
		myDBTrans = new TranContext();
	}
	

	public boolean isWorking() {
		return working;
	}
	
	public void setWorking(boolean working) {
		this.working = working;	
	}
	
	public void run()
	{	
		// 开始无限循环工作
		long times = 0;
		int sleepTime = 60; 
		while (working)
		{
		  try 
		  {
			 List curSubmitReport = getBJOnTimeCreditIntfSumbit();			
			 String xmlFileName = Util.getAppTopFolderPath() + Const.CONFIG_XML_FILE_NAME;
	         Config config = new Config(xmlFileName);
	         sleepTime = config.sleep;
			 for (int n = 0; n < curSubmitReport.size(); n++)
			 {
				try 
				{
				   Date curDate = new Date();						
				   HashMap planInfo = (HashMap) curSubmitReport.get(n);
				   String requestId = (String) planInfo.get("ORDER_SERIAL_NBR");
				   String servId = (String) planInfo.get("SERV_ID");
				   String synType = (String) planInfo.get("OWE_BUSINESS_TYPE_ID");
				   String stateTime = (String) planInfo.get("STATE_DATE");
				   String curBalance = (String) planInfo.get("BALANCE");
				   String creditValue = (String) planInfo.get("CREDIT");
				   String random = String.valueOf(Math.random()).substring(2,10);
			       Date currentTime=new Date();
			       SimpleDateFormat formatter=new SimpleDateFormat("yyyyMMddHHmmss");
			       String time=formatter.format(currentTime);
			       String serial = time + random + "10" + "02";

			       WebSoapBindingImplServiceStub.OnTimeCreditControlReq onTimeCreditControlReq = new WebSoapBindingImplServiceStub.OnTimeCreditControlReq();
			       WebSoapBindingImplServiceStub.OnTimeCreditControl onTimeCreditControl = new WebSoapBindingImplServiceStub.OnTimeCreditControl();
			       onTimeCreditControlReq.setRequestId(serial);
			       onTimeCreditControlReq.setServId(servId);
			       onTimeCreditControlReq.setStateTime(stateTime);
			       onTimeCreditControlReq.setSynType(Integer.parseInt(synType));
			       onTimeCreditControlReq.setInterfaceId("");
			       onTimeCreditControlReq.setCurBalance(curBalance);
			       onTimeCreditControlReq.setCreditValue(creditValue);
			       onTimeCreditControl.setIn0(onTimeCreditControlReq);

				   logger.info("**OnTimeCreditControl**请求参数如下:"
			                    + "\n RequestId(请求流水): " + onTimeCreditControlReq.getRequestId()
			                    + "\n ServId(用户标识): " + onTimeCreditControlReq.getServId()
			                    + "\n SynType(同步类型): " + onTimeCreditControlReq.getSynType()
			                    + "\n curBalance(实时结余): " + onTimeCreditControlReq.getCurBalance()
			                    + "\n creditValue(用户信用度): " + onTimeCreditControlReq.getCreditValue()
			                    + "\n StateTime(状态时间): " + onTimeCreditControlReq.getStateTime());

				   String result = callOnTimeCreditIntfWebServices(onTimeCreditControl,config);
				   
				   if("0".equals(result))
				   {
					   insertBJOnTimeAWorkOrderLog(requestId,serial);
					   deleteBJOnTimeCreditIntfPlan(requestId);
					   logger.info("=========OnTimeCreditControl successful,servId:"+servId+"=========");
				   }
				   else
				   {
					  myDBTrans.roolback();
					  updateBJOnTimeCreditFailPlan(requestId,result,serial);
					  logger.info("=========OnTimeCreditControl failure,servId:"+servId+"当前流水执行失败!!!" );
				   }						   
				   myDBTrans.commit();
				   
					// 关闭数据集
					try 
					{
						myDBTrans.close();
					} 
					catch (Exception e) 
					{
						e.printStackTrace();
					}
				 }
				 catch (RuntimeException e)
				 {
				   logger.info("=========failure=========当前条目计划执行失败!!!" );
				   e.printStackTrace();
				   myDBTrans.roolback();
				   myDBTrans.close();
				 }					
			 }				 
		  }
          catch(Exception ex)
          {
			ex.printStackTrace();
			Util.outPutInfo("未知错误发生" + ex.getMessage());
		  }

			// 关闭数据集
			try 
			{
				myDBTrans.close();
			} 
			catch (Exception e) 
			{
				e.printStackTrace();
			}
			
		  // 睡眠一段时间后再工作
		  try 
		  {
			sleep(sleepTime);
			myDBTrans.freeCon();
			myDBTrans.initConnection();
		  } 
		  catch(InterruptedException e)
		  {
			Util.outPutInfo("线程睡眠被打断,程序继续执行: " + e.getMessage());
			e.printStackTrace();
		  }		  
		}
	}	
		
private String callOnTimeCreditIntfWebServices(WebSoapBindingImplServiceStub.OnTimeCreditControl onTimeCreditControlReq,Config config)
{
   try 
   {           	
	 WebSoapBindingImplServiceStub  stub = new WebSoapBindingImplServiceStub(config.wsEndpoint);
	 WebSoapBindingImplServiceStub.OnTimeCreditControlResponse onTimeCreditControlResp = stub.onTimeCreditControl(onTimeCreditControlReq);
	 logger.info("result is: \n"+onTimeCreditControlResp.getOnTimeCreditControlReturn().getResult());
	 String result = onTimeCreditControlResp.getOnTimeCreditControlReturn().getResult();
	 if("0".equals(result)) return "0";
	 else return onTimeCreditControlResp.getOnTimeCreditControlReturn().getErrorMessage();
   } 
   catch(Exception e)
   {
	 e.printStackTrace();
	 return "5000";
   } 
}


public static void main(String[] args)
{
  String path = Util.getAppTopFolderPath();
  String user = "jlz";
  String pswd = "1q2w3e4r";		
		
  Thread thread = new OnTimeCreditIntf(user, pswd, path, Const.SUBMIT_PLAN_XML_FILE_NAME);
  thread.setDaemon(false);
  ((OnTimeCreditIntf) thread).setWorking(true);
  thread.start();

  // 主线程进入无限睡眠状态,其创建的子线程 thread 继续工作
  try
  {
	Thread.sleep(Long.MAX_VALUE);
  } 
  catch(InterruptedException e) 
  {
	System.out.println("主线睡眠状态被打断,程序继续执行...\n" + e.getMessage());
  }

  // 当主线程睡眠被打断时,程序结束,并设置子线程状态,让其在完成必要工作后也结束
  ((OnTimeCreditIntf) thread).setWorking(false);
}
	
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics