📄 htdlexecdtrw.java
字号:
package gov.gdlt.ssgly.taxcore.taxblh.htdl;
import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.sql.*;
import java.util.TimerTask;
//import gov.gdlt.ssgly.taxcore.comm.util.Constants;
import gov.gdlt.ssgly.taxcore.comm.config.*;
import gov.gdlt.ssgly.taxcore.taxevent.htdl.*;
import gov.gdlt.ssgly.taxcore.taxdao.htdl.*;
import gov.gdlt.ssgly.taxcore.comm.log.LogWritter;
/**
*
* <p>Title: 单线程执行当天任务别表中的任务</p>
*
* <p>Description: 广东地税税收管理员工作平台</p>
*
* <p>Copyright: Copyright (c) 2005 广东省地方税务局,广州市地方税务局</p>
*
* <p>Company: 广州地税</p>
*
* @author 肖雪莲
* 2005-9-19 by xxl
* 加入rwXH,用于实现传参数的调用形式
* @version 1.0
*/
public class HTDLexecDtrw extends TimerTask {
public static final String HTDL_SXLX_PROC = "0";
public static final String HTDL_SXLX_JAVA = "1";
private static boolean isRunning = false; //标识当天任务是否在执行中
//调用ibatis执行指定的procName名字的存储过程,该存储过程具有如下的统一接口:
//具有两个OUT参数,类型为varchar.
//2005-9-19 by xxl
//加入csl,用于实现传参数的调用形式
public HTDLreturnVO executeProc(String procName, String csl) throws Exception {
HTDLreturnVO procRetVO = new HTDLreturnVO();
procRetVO.setProcName(procName);
procRetVO.setCsl(csl);
try {
HTDLdtrwlbDAO dtrwlbDAO = new HTDLdtrwlbDAO();
dtrwlbDAO.execDtrw(procRetVO);
if (procRetVO.getStatus() == null) {
procRetVO.setStatus("0"); //未提供结果并且没有出现异常时,默认为成功
procRetVO.setDetail("接口未提供结果描述!");
}
} catch (Exception e) {
LogWritter.sysDebug(e.toString() + " in " +
HTDLexecDtrw.class.getName());
if (procRetVO.getStatus() == null) {
procRetVO.setStatus("-1"); //出现异常时候,调用程序把执行结果设为失败
}
procRetVO.setDetail("调用出现异常:" + e.toString());
// throw new Exception(e.toString());
}
return procRetVO;
}
//执行指定类名的功能,该类必须实现接口IHTDLcall
//2005-9-19 by xxl
//加入csl,用于实现传参数的调用形式
public HTDLreturnVO executeJavaClass(String taskClassName, String csl) throws Exception {
HTDLreturnVO retVO = new HTDLreturnVO();
try {
Object taskObject = Class.forName(taskClassName).newInstance();
if (taskObject instanceof IHTDLcall) {
IHTDLcall htdlCall = (IHTDLcall) taskObject;
retVO = htdlCall.execute(csl);
if (retVO.getStatus() == null) {
retVO.setStatus("0"); //未提供结果并且没有出现异常时,默认为成功
retVO.setDetail("接口未提供结果描述!");
}
} else { //提供的调用接口没有实现规定的IHTDLcall接口
retVO.setStatus("-1");
retVO.setDetail(taskClassName + "没有实现HTDLcall接口,无法统一调用!");
}
} catch (Exception e) {
e.printStackTrace();
// throw new Exception(HTDLexecDtrw.class.getName() + "执行" + className +"类时出错:" + e.toString());
if (retVO.getStatus() == null) {
retVO.setStatus("-1"); //出现异常时候,调用程序把执行结果设为失败
}
retVO.setDetail("调用出现异常:" + e.getMessage());
}
return retVO;
}
//执行同一分组fzxx的软任务
// public int executeHtrwbyFz(Connection conn, String zb) throws Exception {
public int executeHtrwbyFz(String zb) throws Exception {
int result = ApplicationContext.RET_SUCCESS;
int count = 0;
try {
//根据fzxx参数,取得属于该分组的所有任务
LogWritter.sysDebug(HTDLexecDtrw.class.getName() + "开始获取属于" + zb +
"分组的任务!");
HTDLdtrwlbDAO dtrwDAO = new HTDLdtrwlbDAO();
HTDLreturnVO retVO = new HTDLreturnVO();
HTDLybsdsrwDAO ybsrwDAO = new HTDLybsdsrwDAO();
java.sql.Timestamp dtBefore;
java.sql.Timestamp dtAfter;
ArrayList dtrwList = (ArrayList) dtrwDAO.selectDtrwByFz(zb);
for (int i = 0; i < dtrwList.size(); i++) {
HTDLdtrwVO dtrwVO = (HTDLdtrwVO) dtrwList.get(i);
String rwxh = dtrwVO.getRw_xh();
LogWritter.sysDebug(HTDLexecDtrw.class.getName() + "开始执行" +
dtrwVO.getRw_xh() + "号任务:" + dtrwVO.getDyjk());
dtBefore = new java.sql.Timestamp(System.currentTimeMillis());
//执行任务
//更新任务状态为执行中("1")
dtrwDAO.updateZt("1", rwxh);
if (HTDL_SXLX_PROC.equals(dtrwVO.getSx_lx())) { //该任务是存储过程
retVO = executeProc(dtrwVO.getDyjk(),dtrwVO.getCsl());
} else if (HTDL_SXLX_JAVA.equals(dtrwVO.getSx_lx())) { //该任务是Java类
retVO = executeJavaClass(dtrwVO.getDyjk(),dtrwVO.getCsl());
} else {
retVO.setStatus("-1");
retVO.setDetail("未知的实现类型");
}
dtAfter = new java.sql.Timestamp(System.currentTimeMillis());
LogWritter.sysDebug("执行结果--状态:" + retVO.getStatus() + "描述:" +
retVO.getDetail());
if (retVO.getDetail() == null) {
retVO.setDetail("未提供执行结果的描述");
}
//往DB写执行日志
HTDLzxlogDAO zxlogDAO = new HTDLzxlogDAO();
zxlogDAO.setLrry_dm(dtrwVO.getLrry_dm()); //录入人员代码
zxlogDAO.setRw_xh(dtrwVO.getRw_xh()); //任务序号
zxlogDAO.setRw_mc(dtrwVO.getRw_mc());
zxlogDAO.setBlh_mc(dtrwVO.getBlh_mc()); //业务逻辑名称
zxlogDAO.setBczx_qssj(dtBefore);
zxlogDAO.setBczx_zzsj(dtAfter);
zxlogDAO.setZxjg(retVO.getStatus()); //执行结果
zxlogDAO.setJgms("执行参数:"+dtrwVO.getCsl()+".结果:"+retVO.getDetail()); //结果描述
zxlogDAO.saveZxlog(); //insert into db
//如果执行成功的话,更新已部署任务列表中相应的上次成功执行时间 mod
if (retVO.getStatus().equals("0")) {
ybsrwDAO.updateSccg_sj(rwxh, dtAfter);
}
//更新“当天任务列表”中该任务的当前状态为“执行完毕(2)”mod
dtrwDAO.updateZt("2", rwxh);
LogWritter.sysDebug("任务:" + dtrwVO.getRw_xh() +
dtrwVO.getBlh_mc() + "执行完毕!");
}
} catch (SQLException e) {
e.printStackTrace();
LogWritter.sysError(e.getMessage());
// throw new Exception(e.toString());
} catch (Exception e) {
e.printStackTrace();
LogWritter.sysError(e.getMessage());
// throw new Exception(e.toString());
}
return result; //需要对result做进一步的分析:全部执行成功,部分执行成功(成功的记录数),执行完全失败
}
//对当天任务列表中的所有任务按照分组顺序执行,单线程
//进一步的修改:多线程,按照分组执行 mod
public int executeDtrw() throws Exception {
int result = ApplicationContext.RET_SUCCESS;
try {
HTDLdtrwlbDAO dtrwDAO = new HTDLdtrwlbDAO();
LogWritter.sysDebug("开始获取所有的分组信息");
ArrayList fzxxList = (ArrayList) dtrwDAO.selectFzxx();
//单线程顺序执行
for (int i = 0; i < fzxxList.size(); i++) {
executeHtrwbyFz((String) fzxxList.get(i));
}
} catch (Exception e) {
LogWritter.sysDebug(e.toString());
}
return result;
}
//把要执行的功能放在该方法中,相当于main方法
public void run() {
System.out.println(new Timestamp(System.currentTimeMillis()) +
"当天任务列表中的任务的执行情况");
try {
HTDLdtrwlbDAO dtrwDAO = new HTDLdtrwlbDAO();
int result = dtrwDAO.countDtrwbyZt("1", null); //"1"表示执行中,是否存在未执行完毕的任务
if (result != 0) {
isRunning = true;
} else {
isRunning = false;
}
if (!isRunning) {
isRunning = true;
LogWritter.sysInfo("开始执行当天任务列表中的任务!");
HTDLreturnVO retVO = new HTDLreturnVO();
dtrwDAO.createDtrw(retVO); //重新生成当天任务
executeDtrw(); //执行当天任务
isRunning = false;
LogWritter.sysInfo("完成当天任务列表中的任务执行!");
} else {
LogWritter.sysInfo("上一次任务执行还未结束");
}
} catch (Exception e) {
// e.printStackTrace();
LogWritter.sysError(e.toString());
}
}
public static void main(String[] args) {
HTDLexecDtrw tools = new HTDLexecDtrw();
tools.run();
// HTDLreturnVO retVO = new HTDLreturnVO();
// 以下代码测试执行存储过程
// String procName = "P_HTDL_DTDSRW";
// try {
// Connection conn = tools.getConnection();
// if (conn == null) {
// System.out.println("没有取到连接!");
// return;
// }
// retVO = tools.executeProc(conn, procName);
// System.out.println(retVO.getStatus());
// System.out.println(retVO.getDetail());
// } catch (Exception e) {
// System.out.println(e.toString());
// }
// //以下代码测试java类
// try {
// retVO = tools.executeJavaClass(
// "gov.gdlt.ssgly.taxcore.taxblh.wdsc.WDSChtdl");
// } catch (Exception e) {
// System.out.println(e.toString());
// }
// System.out.println(retVO.getStatus());
// System.out.println(retVO.getDetail());
// Connection conn=null;
// try {
// conn = tools.getConnection();
// if (conn == null) {
// System.out.println("没有取到连接!");
// return;
// }
// tools.executeDtrw(conn);
// } catch (Exception e) {
// System.out.println(e.toString());
// }
// finally {
// try { conn.close();
// } catch (SQLException e) {
// System.out.println(e.toString());
// }
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -