2018-09-27 16:17:06 +08:00
package com.nms.server.service ;
import java.io.File ;
import java.io.IOException ;
import java.text.SimpleDateFormat ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Date ;
import java.util.HashMap ;
import java.util.Iterator ;
import java.util.LinkedList ;
import java.util.List ;
import java.util.Map ;
import net.sf.json.JSONArray ;
import net.sf.json.JSONObject ;
import org.apache.commons.lang.StringUtils ;
import org.apache.log4j.Logger ;
import com.nms.server.bean.EmailInfo ;
import com.nms.server.bean.LoopMissionRoundInfo ;
import com.nms.server.bean.MissionResult ;
import com.nms.server.bean.MissionResult2 ;
import com.nms.server.bean.MissionStateTable ;
2018-11-02 15:59:26 +08:00
import com.nms.server.bean.ServerIpSegment ;
2018-09-27 16:17:06 +08:00
import com.nms.server.bean.Task1 ;
import com.nms.server.bean.Task4 ;
import com.nms.server.bean.Task6 ;
import com.nms.server.common.Common ;
import com.nms.server.common.Constants ;
import com.nms.server.common.EmailTypeConstants ;
import com.nms.server.common.MissionConstants ;
import com.nms.server.dao.CommonDao ;
import com.nms.server.thread.mission.NMSClientTask4Cancel ;
import com.nms.server.util.BoneCPPool ;
import com.nms.server.util.DateUtil ;
import com.nms.server.util.MD5Util ;
import com.nms.server.util.socket.SocketUtils ;
import com.socket.utils.FileComment ;
public class UpgradeService extends CommonService {
private final Logger logger = Logger . getLogger ( UpgradeService . class ) ;
private final SimpleDateFormat format = new SimpleDateFormat ( Constants . COMMON_DATE_FORMAT ) ; //Java Date 类型数据格式化格式
// private CommonDao dao = null;
public UpgradeService ( CommonDao dao ) {
super ( dao ) ;
// this.dao = dao;
}
/ * *
* 获取新任务信息 , 加载到 任务执行操作中
* @time Mar 23 , 2012 - 3 : 28 : 41 PM
* @param missionId 为空时 , 不指定missionId查询
* @return
* /
public ArrayList < MissionStateTable > getNewMessionList ( Long missionId ) {
//-- 查询可执行的任务
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_id, " ) ;
searchSQL . append ( " mst.mission_type, " ) ;
searchSQL . append ( " mst.mission_state, " ) ;
searchSQL . append ( " mst.system_id, " ) ;
searchSQL . append ( " mst.group_id, " ) ;
searchSQL . append ( " to_char(mst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(mst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSQL . append ( " mst.is_loop, " ) ;
searchSQL . append ( " mst.loop_delay " ) ;
searchSQL . append ( " from mission_state_table mst " ) ;
searchSQL . append ( " where 1=1 " ) ;
//2012-03-20 取消任务时间过滤,将对所有任务进行处理
// searchSQL.append("and (mst.end_time>sysdate or mst.end_time is null) ");// 周期任务(未过时) or 非周期任务
if ( missionId ! = null & & missionId . longValue ( ) ! = 0l ) {
searchSQL . append ( " and mst.mission_id = ' " + missionId . longValue ( ) + " ' " ) ;
}
2018-11-21 11:28:19 +08:00
searchSQL . append ( " and mst.mission_state in (1,5) " ) ; //以创建任务 准备撤销任务 均作为新任务周期性载入
2018-09-27 16:17:06 +08:00
searchSQL . append ( " order by mst.create_time,mst.mission_id asc " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " system_id " ) ;
fields . add ( " group_id " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
ArrayList < Map < String , String > > rs = null ;
ArrayList < MissionStateTable > mstList = new ArrayList < MissionStateTable > ( ) ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
2018-11-02 15:59:26 +08:00
Long serverId = Common . getServerTable ( ) . getId ( ) ;
boolean missionSingle = Constants . MISSION_SINGLE . equals ( " 1 " ) ? true : false ;
logger . info ( " 开始加载新任务...过滤当前dc范围内的任务: " + ( missionSingle ? " 是 " : " 否 " ) ) ;
//获取当前dc范围
List < ServerIpSegment > ipSegList = Common . getServerTable ( ) . getIpSegList ( ) ;
2018-09-27 16:17:06 +08:00
for ( Map < String , String > maps : rs ) {
2018-11-02 15:59:26 +08:00
//是否加载任务
boolean flag = false ;
//第一步, 判断是否过滤dc范围外节点
if ( missionSingle ) {
logger . info ( " 当前dc的server_id: " + serverId ) ;
//第二步, 获取每个任务下发的所有节点, 判断是否在dc范围内, 若一个在范围内的都没有就把任务状态改为失败
//----查询任务下发的节点组ids/节点ids
String messionType = maps . get ( " mission_type " ) ;
StringBuffer mnSql = new StringBuffer ( ) ;
mnSql . append ( " SELECT mpt.node_ips_id, mpt.node_groups_id " ) ;
mnSql . append ( " FROM mission_state_table mst " ) ;
mnSql . append ( " LEFT JOIN mission_parameter_table " + messionType + " mpt ON mpt.mission_id=mst.mission_id " ) ;
mnSql . append ( " where mst.mission_id= " + maps . get ( " mission_id " ) ) ;
ArrayList < String > mnFields = new ArrayList < String > ( ) ;
mnFields . add ( " node_ips_id " ) ;
mnFields . add ( " node_groups_id " ) ;
ArrayList < Map < String , String > > mns = dao . dbSelect ( mnSql . toString ( ) , mnFields ) ;
if ( mns ! = null & & mns . size ( ) > 0 ) {
for ( Map < String , String > mn : mns ) {
//----根据节点组ids/节点ids查出seq_id
StringBuffer nodeSQL = new StringBuffer ( ) ;
nodeSQL . append ( " select distinct nt.seq_id,nt.node_type " ) ;
nodeSQL . append ( " from node_table nt " ) ;
nodeSQL . append ( " where 1 = 1 " ) ;
nodeSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
nodeSQL . append ( " and nt.node_state = 0 " ) ;
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
nodeFields . add ( " seq_id " ) ;
nodeFields . add ( " node_type " ) ;
if ( StringUtils . isNotBlank ( mn . get ( " node_ips_id " ) ) ) {
nodeSQL . append ( " and nt.NODE_ID in( " + mn . get ( " node_ips_id " ) + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( mn . get ( " node_groups_id " ) ) ) {
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + mn . get ( " node_groups_id " ) + " ) " , " group_id " , " parent_group_id " ) ;
nodeSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
//----拼写uuid串, 用于校验管理范围外IP
StringBuffer uuidStr = new StringBuffer ( " 0 " ) ;
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
uuidStr . append ( " , " + map . get ( " seq_id " ) ) ;
}
}
}
logger . info ( " mission_id: " + maps . get ( " mission_id " ) + " ,seq_id范围: " + uuidStr . toString ( ) ) ;
StringBuffer omNodeSql = new StringBuffer ( " select distinct nt.seq_id from node_table nt where 1=1 " ) ;
if ( ipSegList ! = null & & ipSegList . size ( ) > 0 ) {
for ( ServerIpSegment map : ipSegList ) {
omNodeSql . append ( " and (ipn < ' " + map . getStartIpn ( ) + " ' or ipn > ' " + map . getEndIpn ( ) + " ') " ) ;
}
}
omNodeSql . append ( " and nt.seq_id in ( " + uuidStr + " ) " ) ;
ArrayList < String > omNodeFields = new ArrayList < String > ( ) ;
omNodeFields . add ( " seq_id " ) ;
ArrayList < Map < String , String > > omNodeMapList = dao . dbSelect ( omNodeSql . toString ( ) , omNodeFields ) ;
if ( omNodeMapList ! = null & & nodeMapList ! = null ) {
if ( omNodeMapList . size ( ) < nodeMapList . size ( ) ) {
flag = true ;
break ;
}
}
}
}
} else {
flag = true ;
}
//任务范围含有dc范围内节点则加载任务, 否则直接将任务状态改为未能执行
if ( flag ) {
logger . info ( " 任务节点在dc范围内, 开始加载... " ) ;
MissionStateTable mission = new MissionStateTable ( ) ;
// mission.setMissionName(maps.get("mission_name"));
mission . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
mission . setMissionType ( StringUtils . isEmpty ( maps . get ( " mission_type " ) ) ? null : Long . parseLong ( maps . get ( " mission_type " ) ) ) ;
mission . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
mission . setSystemId ( StringUtils . isEmpty ( maps . get ( " system_id " ) ) ? null : Long . parseLong ( maps . get ( " system_id " ) ) ) ;
mission . setGroupId ( StringUtils . isEmpty ( maps . get ( " group_id " ) ) ? null : Long . parseLong ( maps . get ( " group_id " ) ) ) ;
mission . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
mission . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
mission . setLoopFlag ( StringUtils . isEmpty ( maps . get ( " is_loop " ) ) ? null : Long . parseLong ( maps . get ( " is_loop " ) ) ) ;
mission . setLoopDelay ( StringUtils . isEmpty ( maps . get ( " loop_delay " ) ) ? null : Long . parseLong ( maps . get ( " loop_delay " ) ) ) ;
mstList . add ( mission ) ;
} else {
2018-11-06 10:58:27 +08:00
String cancelSql = " update mission_state_table set mission_state=-1 where mission_id= " + maps . get ( " mission_id " ) ;
2018-11-02 15:59:26 +08:00
dao . dbUpdate ( cancelSql ) ;
logger . info ( " 任务节点不在dc范围内, 已取消 " ) ;
}
2018-09-27 16:17:06 +08:00
}
}
return mstList ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mstList ;
}
/ * *
* 获取正在执行状态的任务
* 用于任务下发线程初始化操作
* @time Mar 23 , 2012 - 3 : 28 : 05 PM
* @param ids
* @return
* /
public ArrayList < MissionStateTable > getStartMessionList ( String ids ) {
//-- 查询可执行的任务
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_id, " ) ;
searchSQL . append ( " mst.mission_type, " ) ;
searchSQL . append ( " mst.mission_state, " ) ;
searchSQL . append ( " mst.system_id, " ) ;
searchSQL . append ( " mst.group_id, " ) ;
searchSQL . append ( " to_char(mst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(mst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSQL . append ( " mst.is_loop, " ) ;
searchSQL . append ( " mst.loop_delay " ) ;
searchSQL . append ( " from mission_state_table mst " ) ;
searchSQL . append ( " where 1=1 " ) ;
// searchSQL.append("and (mst.end_time>sysdate or mst.end_time is null) ");
searchSQL . append ( " and mst.mission_state in(2,6) " ) ;
if ( StringUtils . isNotEmpty ( ids ) ) {
searchSQL . append ( " and mst.mission_id in ( " + ids + " ) " ) ;
}
searchSQL . append ( " order by mst.create_time,mst.mission_id asc " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " system_id " ) ;
fields . add ( " group_id " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
ArrayList < Map < String , String > > rs = null ;
ArrayList < MissionStateTable > mstList = new ArrayList < MissionStateTable > ( ) ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionStateTable mission = new MissionStateTable ( ) ;
mission . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
mission . setMissionType ( StringUtils . isEmpty ( maps . get ( " mission_type " ) ) ? null : Long . parseLong ( maps . get ( " mission_type " ) ) ) ;
mission . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
mission . setSystemId ( StringUtils . isEmpty ( maps . get ( " system_id " ) ) ? null : Long . parseLong ( maps . get ( " system_id " ) ) ) ;
mission . setGroupId ( StringUtils . isEmpty ( maps . get ( " group_id " ) ) ? null : Long . parseLong ( maps . get ( " group_id " ) ) ) ;
mission . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
mission . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
mission . setLoopFlag ( StringUtils . isEmpty ( maps . get ( " is_loop " ) ) ? null : Long . parseLong ( maps . get ( " is_loop " ) ) ) ;
mission . setLoopDelay ( StringUtils . isEmpty ( maps . get ( " loop_delay " ) ) ? null : Long . parseLong ( maps . get ( " loop_delay " ) ) ) ;
mstList . add ( mission ) ;
}
}
return mstList ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mstList ;
}
public JSONArray getMissionForAgentStart ( Long uuid ) {
try {
if ( uuid = = null | | uuid . longValue ( ) = = 0l ) {
return null ;
}
StringBuffer groupsIdsSQL = new StringBuffer ( ) ;
//当节点组不为空时, 查询该节点组的叶子节点组及其父系节点组ID
if ( uuid ! = null ) {
//--正向查询SQL 查询相关叶子节点组
StringBuffer groupsIdsSQLN = new StringBuffer ( ) ;
groupsIdsSQLN . append ( " select nt.node_group_id from NODE_TABLE nt where 1=1 " ) ;
groupsIdsSQLN . append ( " and nt.seq_id = " + uuid + " and nt.node_state=0 " ) ;
//--逆向查询SQL 查询包括叶子节点组在内的父节点组
// StringBuffer groupsIdsSQLW = new StringBuffer();
// groupsIdsSQLW.append("select distinct ngt.group_id from NODEGROUP_TABLE ngt ");
// groupsIdsSQLW.append("start with ngt.group_id in ( ");
// groupsIdsSQLW.append(groupsIdsSQLN);
// groupsIdsSQLW.append(") connect by prior ngt.parent_group_id = ngt.group_id ");
// groupsIdsSQL.append(groupsIdsSQLW);
//@2018年4月26日15:56:55 适配mysql 数据库
String groupIds = dao . startWithConnectByReverse ( " NODEGROUP_TABLE " , null , " group_id in ( " + groupsIdsSQLN . toString ( ) + " ) " , " group_id " , " parent_group_id " ) ;
groupsIdsSQL . append ( groupIds ) ;
}
String missionSql4 = " select distinct t.mission_id from v_mission_node_group_4 t where t.node_group_id in ( " + groupsIdsSQL + " ) " ;
String missionSql6 = " select distinct t.mission_id from v_mission_node_group_6 t where t.node_group_id in ( " + groupsIdsSQL + " ) " ;
JSONArray infoArray = new JSONArray ( ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
StringBuffer searchSql = new StringBuffer ( ) ;
ArrayList < Map < String , String > > mapsList = new ArrayList < Map < String , String > > ( ) ;
//-- Task4 For once Mission
mapsList . clear ( ) ;
fields . clear ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " command_type " ) ;
fields . add ( " command_ename " ) ;
fields . add ( " command_para " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " result " ) ;
fields . add ( " version " ) ;
searchSql . delete ( 0 , searchSql . length ( ) ) ;
searchSql . append ( " select t.mission_id,t.mission_type,to_char(t.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time,to_char(t.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSql . append ( " mpt4.command_type, mpt4.command_ename, mpt4.command_para, mrt4.result,mpt4.version " ) ;
searchSql . append ( " from mission_state_table t " ) ;
searchSql . append ( " left join mission_parameter_table4 mpt4 on t.mission_id = mpt4.mission_id " ) ;
searchSql . append ( " left join mission_result_table4 mrt4 on mrt4.mission_id = mpt4.mission_id " ) ;
// searchSql.append("left join node_table nt on nt.node_group_id = mpt4.node_group_id and nt.system_id = t.system_id ");
searchSql . append ( " where (t.end_time>sysdate or t.end_time is null) " ) ;
searchSql . append ( " and t.mission_state =2 " ) ;
searchSql . append ( " and t.is_loop =0 " ) ; //非周期任务
// searchSql.append("and mpt4.node_group_id in( "+groupsIdsSQL+") ");
searchSql . append ( " and mpt4.mission_id in( " + missionSql4 + " ) " ) ;
2018-10-18 15:55:40 +08:00
/ *
* 2018年10月12日18 : 10 : 49
* nc 重启获取 未下发的任务
* /
// searchSql.append("and mrt4.result >=40 ");
searchSql . append ( " and mrt4.result = 3 " ) ; //3: 任务下发中
2018-09-27 16:17:06 +08:00
searchSql . append ( " and mrt4.seq_id = " + uuid + " " ) ;
searchSql . append ( " order by t.create_time asc " ) ;
mapsList = dao . dbSelect ( searchSql . toString ( ) , fields ) ;
String split = " | " ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
for ( Map < String , String > map : mapsList ) {
Task4 task4 = new Task4 ( ) ;
JSONObject object = new JSONObject ( ) ;
task4 . setTaskId ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ? Long . parseLong ( map . get ( " mission_id " ) ) : null ) ;
task4 . setTaskType ( StringUtils . isNotEmpty ( map . get ( " mission_type " ) ) ? Long . parseLong ( map . get ( " mission_type " ) ) : null ) ;
task4 . setCommandName ( map . get ( " command_ename " ) ) ;
if ( StringUtils . isNotEmpty ( map . get ( " command_para " ) ) ) {
StringBuffer newStrs = new StringBuffer ( ) ;
String [ ] strs = map . get ( " command_para " ) . split ( " \\ | " ) ;
for ( String str : strs ) {
if ( DateUtil . isDate ( str , Constants . COMMON_DATE_FORMAT ) ) {
newStrs . append ( split + format . parse ( str ) . getTime ( ) ) ;
} else {
newStrs . append ( split + str ) ;
}
}
newStrs = newStrs . length ( ) > 0 ? newStrs . delete ( 0 , split . length ( ) ) : newStrs ;
task4 . setCommandParam ( newStrs . toString ( ) ) ;
}
task4 . setStartTime ( StringUtils . isEmpty ( map . get ( " start_time " ) ) ? null : format . parse ( map . get ( " start_time " ) ) . getTime ( ) ) ;
task4 . setEndTime ( StringUtils . isEmpty ( map . get ( " end_time " ) ) ? null : format . parse ( map . get ( " end_time " ) ) . getTime ( ) ) ;
task4 . setCommandType ( StringUtils . isNotEmpty ( map . get ( " command_type " ) ) ? Long . parseLong ( map . get ( " command_type " ) ) : null ) ;
task4 . setState ( StringUtils . isNotEmpty ( map . get ( " result " ) ) ? Long . parseLong ( map . get ( " result " ) ) : null ) ;
task4 . setVersion ( StringUtils . isNotEmpty ( map . get ( " version " ) ) ? Long . parseLong ( map . get ( " version " ) ) : null ) ;
object . put ( " typeInfo " , task4 . getTaskType ( ) ) ;
object . put ( " taskInfo " , task4 ) ;
infoArray . add ( object ) ;
}
}
//-- Task4 For LoopMission
mapsList . clear ( ) ;
fields . clear ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " command_type " ) ;
fields . add ( " command_ename " ) ;
fields . add ( " command_para " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " result " ) ;
fields . add ( " version " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
fields . add ( " mission_state " ) ;
searchSql . delete ( 0 , searchSql . length ( ) ) ;
searchSql . append ( " select t.mission_id,t.mission_type,to_char(t.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time,to_char(t.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSql . append ( " mpt4.command_type, mpt4.command_ename, mpt4.command_para, mrt4.result,mpt4.version,t.is_loop,t.loop_delay,t.mission_state " ) ;
searchSql . append ( " from mission_state_table t " ) ;
searchSql . append ( " left join mission_parameter_table4 mpt4 on t.mission_id = mpt4.mission_id " ) ;
searchSql . append ( " left join loopmission_state_table lmst on lmst.mission_id = t.mission_id " ) ;
searchSql . append ( " left join mission_result_table4 mrt4 on mrt4.mission_id = lmst.cur_mission_id " ) ;
// searchSql.append("left join node_table nt on nt.node_group_id = mpt4.node_group_id and nt.system_id = t.system_id ");
searchSql . append ( " where 1=1 " ) ;
searchSql . append ( " and t.mission_state =2 " ) ;
searchSql . append ( " and lmst.cur_mission_id in ( select max(lmst.cur_mission_id) from loopmission_state_table lmst where lmst.mission_state in (1,2) group by lmst.mission_id) " ) ;
searchSql . append ( " and t.is_loop =1 " ) ;
// searchSql.append("and mpt4.node_group_id in( "+groupsIdsSQL+") ");
searchSql . append ( " and mpt4.mission_id in( " + missionSql4 + " ) " ) ;
// searchSql.append("and nt.seq_id = "+uuid.longValue()+" ");
2018-10-18 15:55:40 +08:00
/ *
* 2018年10月12日18 : 10 : 49
* nc 重启获取 未下发的任务
* /
// searchSql.append("and mrt4.result >=40 ");
searchSql . append ( " and mrt4.result = 3 " ) ; //3: 任务下发中
2018-09-27 16:17:06 +08:00
searchSql . append ( " and mrt4.seq_id = " + uuid + " " ) ;
searchSql . append ( " order by t.create_time asc " ) ;
mapsList = dao . dbSelect ( searchSql . toString ( ) , fields ) ;
split = " | " ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
for ( Map < String , String > map : mapsList ) {
Task4 task4 = new Task4 ( ) ;
JSONObject object = new JSONObject ( ) ;
task4 . setTaskId ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ? Long . parseLong ( map . get ( " mission_id " ) ) : null ) ;
task4 . setTaskType ( StringUtils . isNotEmpty ( map . get ( " mission_type " ) ) ? Long . parseLong ( map . get ( " mission_type " ) ) : null ) ;
task4 . setCommandName ( map . get ( " command_ename " ) ) ;
if ( StringUtils . isNotEmpty ( map . get ( " command_para " ) ) ) {
StringBuffer newStrs = new StringBuffer ( ) ;
String [ ] strs = map . get ( " command_para " ) . split ( " \\ | " ) ;
for ( String str : strs ) {
if ( DateUtil . isDate ( str , Constants . COMMON_DATE_FORMAT ) ) {
newStrs . append ( split + format . parse ( str ) . getTime ( ) ) ;
} else {
newStrs . append ( split + str ) ;
}
}
newStrs = newStrs . length ( ) > 0 ? newStrs . delete ( 0 , split . length ( ) ) : newStrs ;
task4 . setCommandParam ( newStrs . toString ( ) ) ;
}
task4 . setStartTime ( StringUtils . isEmpty ( map . get ( " start_time " ) ) ? null : format . parse ( map . get ( " start_time " ) ) . getTime ( ) ) ;
task4 . setEndTime ( StringUtils . isEmpty ( map . get ( " end_time " ) ) ? null : format . parse ( map . get ( " end_time " ) ) . getTime ( ) ) ;
task4 . setCommandType ( StringUtils . isNotEmpty ( map . get ( " command_type " ) ) ? Long . parseLong ( map . get ( " command_type " ) ) : null ) ;
task4 . setState ( StringUtils . isNotEmpty ( map . get ( " result " ) ) ? Long . parseLong ( map . get ( " result " ) ) : null ) ;
task4 . setVersion ( StringUtils . isNotEmpty ( map . get ( " version " ) ) ? Long . parseLong ( map . get ( " version " ) ) : null ) ;
task4 . setIsLoop ( StringUtils . isNotEmpty ( map . get ( " is_loop " ) ) ? Long . parseLong ( map . get ( " is_loop " ) ) : null ) ;
task4 . setLoopDelay ( StringUtils . isNotEmpty ( map . get ( " loop_delay " ) ) ? Long . parseLong ( map . get ( " loop_delay " ) ) : null ) ;
task4 . setMissionState ( StringUtils . isNotEmpty ( map . get ( " mission_state " ) ) ? Long . parseLong ( map . get ( " mission_state " ) ) : null ) ;
object . put ( " typeInfo " , task4 . getTaskType ( ) ) ;
object . put ( " taskInfo " , task4 ) ;
infoArray . add ( object ) ;
}
}
//-- Task6
mapsList . clear ( ) ;
fields . clear ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " command_type " ) ;
fields . add ( " command_ename " ) ;
fields . add ( " command_para " ) ;
fields . add ( " source_path " ) ;
fields . add ( " target_path " ) ;
fields . add ( " check_value " ) ;
fields . add ( " start_time " ) ;
fields . add ( " result " ) ;
fields . add ( " version " ) ;
fields . add ( " old_task_id " ) ;
searchSql . delete ( 0 , searchSql . length ( ) ) ;
searchSql . append ( " select t.mission_id,t.mission_type, " ) ;
searchSql . append ( " mpt6.old_task_id, " ) ;
searchSql . append ( " mpt6.command_type, mpt6.command_ename, mpt6.command_para,mpt6.source_path,mpt6.target_path,mpt6.check_value,to_char(mpt6.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, mrt6.result,mpt6.version " ) ;
searchSql . append ( " from mission_state_table t " ) ;
searchSql . append ( " left join mission_parameter_table6 mpt6 on t.mission_id = mpt6.mission_id " ) ;
searchSql . append ( " left join mission_result_table6 mrt6 on mrt6.mission_id = mpt6.mission_id " ) ;
// searchSql.append("left join node_table nt on nt.node_group_id = mpt4.node_group_id and nt.system_id = t.system_id ");
searchSql . append ( " where (t.end_time>sysdate or t.end_time is null) " ) ;
searchSql . append ( " and t.mission_state =2 " ) ;
// searchSql.append("and mpt6.node_group_id in( "+groupsIdsSQL+") ");
searchSql . append ( " and mpt6.mission_id in( " + missionSql6 + " ) " ) ;
// searchSql.append("and nt.seq_id = "+uuid.longValue()+" ");
2018-10-18 15:55:40 +08:00
/ *
* 2018年10月12日18 : 10 : 49
* nc 重启获取 未下发的任务
* /
// searchSql.append("and mrt6.result >=40 ");
searchSql . append ( " and mrt6.result = 3 " ) ; //3: 任务下发中
2018-09-27 16:17:06 +08:00
searchSql . append ( " and mrt6.seq_id = " + uuid + " " ) ;
searchSql . append ( " order by t.create_time asc " ) ;
mapsList = dao . dbSelect ( searchSql . toString ( ) , fields ) ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
for ( Map < String , String > map : mapsList ) {
Task6 task6 = new Task6 ( ) ;
JSONObject object = new JSONObject ( ) ;
task6 . setTaskId ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ? Long . parseLong ( map . get ( " mission_id " ) ) : null ) ;
task6 . setTaskType ( StringUtils . isNotEmpty ( map . get ( " mission_type " ) ) ? Long . parseLong ( map . get ( " mission_type " ) ) : null ) ;
task6 . setCommandName ( map . get ( " command_ename " ) ) ;
task6 . setCommandType ( StringUtils . isNotEmpty ( map . get ( " command_type " ) ) ? Long . parseLong ( map . get ( " command_type " ) ) : null ) ;
task6 . setCommandParam ( map . get ( " command_para " ) ) ;
task6 . setFileName ( SocketUtils . removeTimeTagFileName ( map . get ( " source_path " ) ) ) ;
task6 . setDestPath ( map . get ( " target_path " ) ) ;
task6 . setMd5Value ( map . get ( " check_value " ) ) ;
task6 . setUpgradeTime ( StringUtils . isEmpty ( map . get ( " start_time " ) ) ? null : format . parse ( map . get ( " start_time " ) ) . getTime ( ) ) ;
task6 . setOldTaskId ( StringUtils . isNotEmpty ( map . get ( " old_task_id " ) ) ? Long . parseLong ( map . get ( " old_task_id " ) ) : null ) ;
task6 . setState ( StringUtils . isNotEmpty ( map . get ( " result " ) ) ? Long . parseLong ( map . get ( " result " ) ) : null ) ;
task6 . setVersion ( StringUtils . isNotEmpty ( map . get ( " version " ) ) ? Long . parseLong ( map . get ( " version " ) ) : null ) ;
object . put ( " typeInfo " , task6 . getTaskType ( ) ) ;
object . put ( " taskInfo " , task6 ) ;
infoArray . add ( object ) ;
}
}
return infoArray ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return null ;
}
/ * *
* 根据任务ID 获取任务信息用于 MissionInfo1
* @time Oct 25 , 2011 - 10 : 19 : 00 AM
* @param missionId 可为空 , 为空时 , 全校验 , 非空时 校验指定Id 返回
* /
public MissionStateTable getMessionById ( Long missionId ) {
//-- 查询可执行的任务
StringBuffer searchSQL = new StringBuffer ( ) ;
if ( missionId = = null | | missionId . longValue ( ) = = 0l ) {
return null ;
}
searchSQL . append ( " select mst.mission_id, " ) ;
searchSQL . append ( " mst.mission_type, " ) ;
searchSQL . append ( " mst.mission_state, " ) ;
searchSQL . append ( " mst.system_id, " ) ;
searchSQL . append ( " mst.group_id, " ) ;
searchSQL . append ( " to_char(mst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(mst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSQL . append ( " mst.is_loop, " ) ;
searchSQL . append ( " mst.loop_delay " ) ;
searchSQL . append ( " from mission_state_table mst " ) ;
searchSQL . append ( " where 1=1 " ) ;
// searchSQL.append("and (mst.end_time>sysdate or mst.end_time is null) ");
// searchSQL.append("and mst.mission_state in (1,2,3,4) ");
searchSQL . append ( " and mst.mission_id = ' " + missionId + " ' " ) ;
searchSQL . append ( " order by mst.create_time asc " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " system_id " ) ;
fields . add ( " group_id " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
MissionStateTable mission = new MissionStateTable ( ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > maps = rs . get ( 0 ) ;
mission . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
mission . setMissionType ( StringUtils . isEmpty ( maps . get ( " mission_type " ) ) ? null : Long . parseLong ( maps . get ( " mission_type " ) ) ) ;
mission . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
mission . setSystemId ( StringUtils . isEmpty ( maps . get ( " system_id " ) ) ? null : Long . parseLong ( maps . get ( " system_id " ) ) ) ;
mission . setGroupId ( StringUtils . isEmpty ( maps . get ( " group_id " ) ) ? null : Long . parseLong ( maps . get ( " group_id " ) ) ) ;
mission . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
mission . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
mission . setLoopFlag ( StringUtils . isEmpty ( maps . get ( " is_loop " ) ) ? null : Long . parseLong ( maps . get ( " is_loop " ) ) ) ;
mission . setLoopDelay ( StringUtils . isEmpty ( maps . get ( " loop_delay " ) ) ? null : Long . parseLong ( maps . get ( " loop_delay " ) ) ) ;
}
return mission ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return null ;
}
/ * *
* 校验并初始化周期任务轮次信息 < br >
* < p > 设计说明 : < br >
* 1 、 校验 缓存中是否存在 该周期任务信息 , 不存在 则添加 < br >
* 2 、 校验 缓存中是否存在 该周期任务的轮次信息 不存在 则添加 < br >
* 3 、 校验 缓存中 轮次信息是否 符合要求 : < br >
* a 、 周期判定 [ startTime , endTime ) < br >
* b 、 保证周期任务的轮次信息的连续性和非重复性 ( 起始时间 至 结束时间 无遗漏 无交集 ) < br >
* c 、 过期的轮次信息创建 其状态为 4 ( 未能执行 ) < br >
* d 、 预置周期 ( 轮次起始时间大于当前系统时间 ) 数量 < br >
* 为 Constants . COMMON_MISSION_LOOP_PRESET_NUMBER < br >
* e 、 新预置轮次信息的状态为 0 < br >
* @time Feb 13 , 2012 - 10 : 40 : 41 AM
* @param missionId
* @param startTime
* @param endTime
* @param missionCycle
* /
public void checkAndInitMissionCycle ( MissionStateTable mission ) throws Exception {
/**参数有效性校验*/
if ( mission = = null | | mission . getMissionId ( ) = = null
| | mission . getStartTime ( ) = = null
| | mission . getEndTime ( ) = = null
| | mission . getLoopFlag ( ) = = null ) {
return ;
}
/**设计实现*/
//- 校验 缓存中是否存在周期任务
if ( Common . getLoopMissionInfoMap ( ) . get ( mission . getMissionId ( ) ) = = null ) {
this . updateLoopMissionInfo ( Common . getLoopMissionInfoMap ( ) , mission . getMissionId ( ) ) ; //将周期任务保存到缓存中
mission = Common . getLoopMissionInfoMap ( ) . get ( mission . getMissionId ( ) ) ;
}
/**参数有效性再次校验: 出现过经过再次获取Mission仍然mission为null的情况*/
if ( mission = = null | | mission . getMissionId ( ) = = null
| | mission . getStartTime ( ) = = null
| | mission . getEndTime ( ) = = null
| | mission . getLoopFlag ( ) = = null ) {
return ;
}
//- 校验 缓存中是否存在周期任务的轮次信息
this . updateLoopMissionRoundInfo ( Common . getLoopMissionRoundInfoList ( ) , mission . getMissionId ( ) ) ; //更新指定周期任务ID的轮次信息
List < LoopMissionRoundInfo > roundInfoList = Common . getLoopMissionRoundInfoList ( ) . get ( mission . getMissionId ( ) ) ;
// if(roundInfoList==null || roundInfoList.size()==0){
// roundInfoList = Common.getLoopMissionRoundInfoList().get(mission.getMissionId());
// }
//- 校验 轮次信息是否符合要求
SimpleDateFormat format = new SimpleDateFormat ( Constants . COMMON_DATE_FORMAT ) ;
long timeStart = mission . getStartTime ( ) . getTime ( ) ; // 任务的周期起始时间点(毫秒)
long timeEnd = mission . getEndTime ( ) . getTime ( ) ; // 任务的周期结束时间点(毫秒)
long timeDelay = mission . getLoopDelay ( ) * 60 * 1000 ; // 任务的周期值(毫秒)
int preset = Constants . MISSION_LOOP_PRESET_NUMBER ; //preset预置数
//- 新创建任务 时间起始点为当前系统时间
// if(mission.getMissionState().longValue()==1l){
// if(timeStart<System.currentTimeMillis()){
// timeStart = System.currentTimeMillis();
// }
// }
logger . debug ( " new Date() 和 system.currentTimeMillis() " + ( new Date ( ) . getTime ( ) ) + " VS " + System . currentTimeMillis ( ) ) ;
/ *
* 轮次的时间段前闭后开区间
* 预置周期为 : 轮次时间 > 当前系统时间
* 调整后的timeStart 为roundInfoList最后一个对象的结束时间
* * /
//-- 第一步 获取已存在的轮次信息 调整周期的起始时间、结束时间和预置数
if ( roundInfoList ! = null & & roundInfoList . size ( ) > 0 ) { //继续校验,并检查
LoopMissionRoundInfo roundInfo = null ;
for ( Iterator < LoopMissionRoundInfo > roundInfoIte = roundInfoList . iterator ( ) ; roundInfoIte . hasNext ( ) ; ) {
roundInfo = roundInfoIte . next ( ) ;
if ( roundInfo . getStartTime ( ) . getTime ( ) > System . currentTimeMillis ( ) ) { //预置轮次信息数量判断
preset - - ;
}
timeStart = timeStart > roundInfo . getEndTime ( ) . getTime ( ) ? timeStart : roundInfo . getEndTime ( ) . getTime ( ) ;
}
}
//-- 第二步 补齐新轮次信息
List < String [ ] > cycleList = new LinkedList < String [ ] > ( ) ; //新轮次信息集合
a : while ( preset > 0 ) {
long timePoint = timeStart + timeDelay ; //周期游标
int cycleState = 0 ;
if ( timePoint > timeEnd ) { //周期游标 末端调整
break ;
}
/ * *
周期任务的周期判定 : “ 前闭后开 ” 区间 , 即 : 包含起始时间点 , 不包含结束时间点 。
当前周期与之后的周期状态均为0 ( 预置 ) , 过期周期状态为4 ( 未能执行 )
* * /
if ( timeStart > System . currentTimeMillis ( ) ) { //预置周期
cycleState = 0 ;
preset - - ;
} else if ( timePoint < System . currentTimeMillis ( ) ) { // 过期周期
cycleState = 4 ;
} else { //当前周期[上一周期的timePoint,下一周期的timeStart)
cycleState = 0 ;
}
cycleList . add ( new String [ ] { mission . getMissionId ( ) + " " , cycleState + " " , format . format ( timeStart ) , format . format ( timePoint ) } ) ;
timeStart = timePoint ;
if ( timeEnd = = timePoint ) {
break a ;
}
}
//-- 第三步 保存 并 更新 轮次信息
try {
dao . setAutoCommit ( false ) ;
if ( cycleList . size ( ) > 0 ) {
String sql = " insert into loopmission_state_table (mission_id,mission_state,start_time,end_time) values (?,?,to_date(?,' " + Constants . DB_DATE_FORMAT + " '),to_date(?,' " + Constants . DB_DATE_FORMAT + " ')) " ;
dao . dbUpdateByBatch ( sql , cycleList ) ;
}
//-- 更新缓存中的周期任务的 轮次信息
if ( cycleList . size ( ) > 0 ) {
this . updateLoopMissionRoundInfo ( Common . getLoopMissionRoundInfoList ( ) , mission . getMissionId ( ) ) ;
}
//if(mission.getMissionState()== MissionConstants.MISSION_STATE_CREATE){
//-- 修改任务状态为 mission_state = 2已开始执行
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = ? , mst.AUTO_DESC=? where mst.mission_id= ?",MissionConstants.MISSION_STATE_RUNNING_FAIL,MissionConstants.ERROR_TASK_NO_USED_NODE,mission.getMissionId().longValue());
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 2 where mst.mission_id="+mission.getMissionId().longValue());
//}
dao . commit ( ) ;
} catch ( Exception e ) {
dao . rollback ( ) ;
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 针对任务已创建状态的任务 , 为其初始化任务结果集
* 查询任务状态 , 校验是否执行初始化
* 查询初始化结果的节点 , 保存入库
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* @param missionId 任务Id
* @param systemId 系统Id
* @param nodeGroupId 节点组IDs 多个逗号隔开 , 不能超过1000
* @param nodeIpsId 节点IDs 多个节点逗号隔开 , 不能超过1000
* @param missionType 任务类型
* /
public void initMissionResults ( Long missionId , String nodeGroupId , String nodeIpsId , int missionType ) throws Exception {
if ( missionId = = null | | missionId . longValue ( ) = = 0 | | missionType = = 0 ) {
return ;
}
try {
dao . setAutoCommit ( false ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_state from mission_state_table mst where mst.mission_id = " + missionId . longValue ( ) + " and mst.mission_state<>3 " ) ;
fields . add ( " mission_state " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
if ( rs . get ( 0 ) ! = null & & rs . get ( 0 ) . get ( " mission_state " ) ! = null & & " 2 " . equals ( rs . get ( 0 ) . get ( " mission_state " ) . trim ( ) ) ) {
return ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
}
searchSQL . delete ( 0 , searchSQL . length ( ) ) ;
searchSQL . append ( " select distinct nt.seq_id " ) ;
searchSQL . append ( " from node_table nt " ) ;
searchSQL . append ( " where 1=1 " ) ;
searchSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
searchSQL . append ( " and nt.node_state = 0 " ) ;
if ( StringUtils . isNotBlank ( nodeIpsId ) ) {
searchSQL . append ( " and nt.NODE_ID in( " + nodeIpsId + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( nodeGroupId ) ) {
// searchSQL.append(" and nt.node_group_id in( select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 start with nt.group_id in ("+nodeGroupId+") connect by prior nt.group_id = nt.parent_group_id )");
//@2018年4月26日15:57:27 适配mysql 数据库
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + nodeGroupId + " ) " , " group_id " , " parent_group_id " ) ;
searchSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
// searchSQL.append(getIpnSelect());
fields . clear ( ) ;
fields . add ( " seq_id " ) ;
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 循环插入结果信息
if ( rs ! = null & & rs . size ( ) > 0 ) {
String sql = " insert into mission_result_table " + missionType + " (mission_id,seq_id,result) values (?,?,?) " ;
LinkedList < String [ ] > params = new LinkedList < String [ ] > ( ) ;
for ( Map < String , String > maps : rs ) {
params . add ( new String [ ] { missionId . longValue ( ) + " " , maps . get ( " seq_id " ) + " " , " 3 " } ) ;
}
//-- 修改任务状态为 mission_state = 2已开始执行
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 2 where mst.mission_id= " + missionId . longValue ( ) ) ;
dao . dbUpdateByBatch ( sql , params ) ;
}
dao . commit ( ) ;
} catch ( Exception e ) {
try {
dao . rollback ( ) ;
} catch ( Exception e1 ) {
logger . error ( " " , e1 ) ;
}
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 初始化任务信息 ( 校验任务下发节点有效 、 非服务器和管理范围外Node 结果判定失败 )
* 查询任务下发节点 , 并做校验和初始化操作
* 1 、 校验无有效下发节点 ( 任务未能执行 )
* 2 、 校验非服务器节点 ( 初始化该节点失败的任务结果 )
* 3 、 校验管理范围外节点 ( 初始化该节点失败的任务结果 )
* 4 、 插入任务结果并更新任务状态
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* @param missionId 任务Id
* @param systemId 系统Id
* @param nodeGroupId 节点组IDs 多个逗号隔开 , 不能超过1000
* @param nodeIpsId 节点IDs 多个节点逗号隔开 , 不能超过1000
* @param missionType 任务类型
* /
public void initMissionResults2 ( Long missionId , String nodeGroupId , String nodeIpsId , int missionType ) throws Exception {
/* 参数校验 */
if ( missionId = = null | | missionId . longValue ( ) = = 0 | | missionType = = 0 ) {
return ;
}
/* 任务初始化业务 */
try {
dao . setAutoCommit ( false ) ;
ArrayList < String > msFields = new ArrayList < String > ( ) ;
StringBuffer msSQL = new StringBuffer ( ) ;
//即时判断任务状态是否为已创建状态
msFields . add ( " mission_state " ) ;
msSQL . append ( " select mst.mission_state from mission_state_table mst where mst.mission_id = " + missionId . longValue ( ) + " and mst.mission_state = " + MissionConstants . MISSION_STATE_CREATE ) ;
ArrayList < Map < String , String > > missionSateMap = dao . dbSelect ( msSQL . toString ( ) , msFields ) ;
if ( missionSateMap = = null | | missionSateMap . size ( ) = = 0 ) {
return ;
}
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
StringBuffer nodeSQL = new StringBuffer ( ) ;
//查询任务下发节点
nodeFields . add ( " seq_id " ) ;
nodeFields . add ( " node_type " ) ;
nodeSQL . append ( " select distinct nt.seq_id,nt.node_type " ) ;
nodeSQL . append ( " from node_table nt " ) ;
nodeSQL . append ( " where 1 = 1 " ) ;
nodeSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
nodeSQL . append ( " and nt.node_state = 0 " ) ;
if ( StringUtils . isNotBlank ( nodeIpsId ) ) {
nodeSQL . append ( " and nt.NODE_ID in( " + nodeIpsId + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( nodeGroupId ) ) {
// nodeSQL.append(" and nt.node_group_id in( select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 start with nt.group_id in ("+nodeGroupId+") connect by prior nt.group_id = nt.parent_group_id )");
//@2018年4月26日15:57:27 适配mysql 数据库
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + nodeGroupId + " ) " , " group_id " , " parent_group_id " ) ;
nodeSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
// 任务下发节点
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
//拼写uuid串, 用于校验管理范围外IP
StringBuffer uuidStr = new StringBuffer ( " 0 " ) ;
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
uuidStr . append ( " , " + map . get ( " seq_id " ) ) ;
}
}
//查询任务下发节点sql-管理范围外节点
2018-11-01 13:54:02 +08:00
//是否限制为当前dc范围
boolean missionSingle = Constants . MISSION_SINGLE . equals ( " 1 " ) ? true : false ;
StringBuffer msSql = new StringBuffer ( " " ) ;
if ( missionSingle ) {
Long serverId = Common . getServerTable ( ) . getId ( ) ;
msSql . append ( " and sis.server_id= " ) ;
msSql . append ( serverId ) ;
msSql . append ( " " ) ;
}
2018-09-27 16:17:06 +08:00
ArrayList < String > ipnSegmentFields = new ArrayList < String > ( ) ;
2018-11-01 13:54:02 +08:00
StringBuffer ipnSegmentSQL = new StringBuffer ( " select sis.start_ipn,sis.end_ipn from server_ip_segment sis left join server_table st on st.id = sis.server_id where st.server_state='0' and nvl(sis.segment_state,0) <>-1 " ) ;
ipnSegmentSQL . append ( msSql ) ;
2018-09-27 16:17:06 +08:00
ipnSegmentFields . add ( " start_ipn " ) ;
ipnSegmentFields . add ( " end_ipn " ) ;
ArrayList < Map < String , String > > omNodeMapList = dao . dbSelect ( ipnSegmentSQL . toString ( ) , ipnSegmentFields ) ;
StringBuffer omNodeSql = new StringBuffer ( " select distinct nt.seq_id from node_table nt where 1=1 " ) ;
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : omNodeMapList ) {
omNodeSql . append ( " and (ipn < ' " + map . get ( " start_ipn " ) + " ' or ipn > ' " + map . get ( " end_ipn " ) + " ') " ) ;
}
}
omNodeSql . append ( " and nt.seq_id in ( " + uuidStr + " ) " ) ;
ArrayList < String > omNodeFields = new ArrayList < String > ( ) ;
omNodeFields . add ( " seq_id " ) ;
omNodeMapList = dao . dbSelect ( omNodeSql . toString ( ) , omNodeFields ) ;
//循环插入结果信息
String sql = " insert into mission_result_table " + missionType + " (mission_id,seq_id,result,result_desc) values (?,?,?,?) " ;
LinkedList < String [ ] > params = new LinkedList < String [ ] > ( ) ;
node : for ( Map < String , String > nodeMap : nodeMapList ) {
if ( " 0 " . equals ( nodeMap . get ( " node_type " ) ) ) { //服务器节点
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
omNode : for ( Map < String , String > map : omNodeMapList ) {
if ( nodeMap . get ( " seq_id " ) . equals ( map . get ( " seq_id " ) ) ) { //管理范围外节点失败结果
2018-11-01 13:54:02 +08:00
//params.add(new String[]{missionId.longValue()+"",nodeMap.get("seq_id")+"","1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE});
2018-09-27 16:17:06 +08:00
continue node ;
}
}
}
//可下发服务器节点
params . add ( new String [ ] { missionId . longValue ( ) + " " , nodeMap . get ( " seq_id " ) + " " , " 3 " , null } ) ;
} else { //非服务器
params . add ( new String [ ] { missionId . longValue ( ) + " " , nodeMap . get ( " seq_id " ) + " " , " 1 " , MissionConstants . ERROR_RESULT_NOT_SERVER } ) ;
}
}
//-- 修改任务状态为 mission_state = 2已开始执行
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state =? , mst.AUTO_DESC=? where mst.mission_id=? " , MissionConstants . MISSION_STATE_RUNNING_OK , format . format ( System . currentTimeMillis ( ) ) + " " + MissionConstants . NOTICE_TASK_RUNNING , missionId . longValue ( ) ) ;
dao . dbUpdateByBatch ( sql , params ) ;
} else {
//无节点任务
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = ? , mst.AUTO_DESC=? where mst.mission_id= ? " , MissionConstants . MISSION_STATE_RUNNING_FAIL , format . format ( System . currentTimeMillis ( ) ) + " " + MissionConstants . ERROR_TASK_NO_USED_NODE , missionId . longValue ( ) ) ;
}
dao . commit ( ) ;
} catch ( Exception e ) {
dao . rollback ( ) ;
throw e ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 初始化任务信息 ( 校验任务下发节点有效 、 非服务器和管理范围外Node 结果判定失败 )
* 查询任务下发节点 , 并做校验和初始化操作
* 1 、 校验无有效下发节点 ( 任务未能执行 )
* 2 、 校验非服务器节点 ( 初始化该节点失败的任务结果 )
* 3 、 校验管理范围外节点 ( 初始化该节点失败的任务结果 )
* 4 、 插入任务结果并更新任务状态
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* @param missionId 任务Id
* @param systemId 系统Id
* @param nodeGroupId 节点组IDs 多个逗号隔开 , 不能超过1000
* @param nodeIpsId 节点IDs 多个节点逗号隔开 , 不能超过1000
* @param missionType 任务类型
* /
public void initLoopMissionResults2 ( Long curMissionId , String nodeGroupId , String nodeIpsId , int resultValue ) throws Exception {
/* 参数校验 */
if ( curMissionId = = null | | curMissionId . longValue ( ) = = 0 ) {
return ;
}
/* 任务初始化业务 */
try {
dao . setAutoCommit ( false ) ;
ArrayList < String > msFields = new ArrayList < String > ( ) ;
StringBuffer msSQL = new StringBuffer ( ) ;
//即时判断任务状态是否为已创建状态
msFields . add ( " mission_state " ) ;
msSQL . append ( " select mst.mission_state from loopmission_state_table mst where mst.cur_mission_id = " + curMissionId . longValue ( ) + " and (mst.mission_state <> " + MissionConstants . MISSION_STATE_FINISHING + " or mst.mission_state <> " + MissionConstants . MISSION_STATE_CANCEL_FINISHING + " ) " ) ;
ArrayList < Map < String , String > > missionSateMap = dao . dbSelect ( msSQL . toString ( ) , msFields ) ;
if ( missionSateMap = = null | | missionSateMap . size ( ) = = 0 ) {
return ;
}
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
StringBuffer nodeSQL = new StringBuffer ( ) ;
//查询任务下发节点
nodeFields . add ( " seq_id " ) ;
nodeFields . add ( " node_type " ) ;
nodeSQL . append ( " select distinct nt.seq_id,nt.node_type " ) ;
nodeSQL . append ( " from node_table nt " ) ;
nodeSQL . append ( " where 1 = 1 " ) ;
nodeSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
nodeSQL . append ( " and nt.node_state = 0 " ) ;
logger . info ( " curMissionId= " + curMissionId + " nodeIps= " + nodeIpsId ) ;
if ( StringUtils . isNotBlank ( nodeIpsId ) ) {
nodeSQL . append ( " and nt.NODE_ID in( " + nodeIpsId + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( nodeGroupId ) ) {
// nodeSQL.append(" and nt.node_group_id in( select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 start with nt.group_id in ("+nodeGroupId+") connect by prior nt.group_id = nt.parent_group_id )");
//@2018年4月26日15:57:27 适配mysql 数据库
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + nodeGroupId + " ) " , " group_id " , " parent_group_id " ) ;
nodeSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
// 任务下发节点
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
//拼写uuid串, 用于校验管理范围外IP
StringBuffer uuidStr = new StringBuffer ( " 0 " ) ;
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
uuidStr . append ( " , " + map . get ( " seq_id " ) ) ;
}
}
//查询任务下发节点sql-管理范围外节点
2018-11-02 15:59:26 +08:00
boolean missionSingle = Constants . MISSION_SINGLE . equals ( " 1 " ) ? true : false ;
StringBuffer msSql = new StringBuffer ( " " ) ;
if ( missionSingle ) {
Long serverId = Common . getServerTable ( ) . getId ( ) ;
msSql . append ( " and sis.server_id= " ) ;
msSql . append ( serverId ) ;
msSql . append ( " " ) ;
}
2018-09-27 16:17:06 +08:00
ArrayList < String > ipnSegmentFields = new ArrayList < String > ( ) ;
2018-11-02 15:59:26 +08:00
StringBuffer ipnSegmentSQL = new StringBuffer ( " select sis.start_ipn,sis.end_ipn from server_ip_segment sis left join server_table st on st.id = sis.server_id where st.server_state='0' and nvl(sis.segment_state,0) <>-1 " ) ;
ipnSegmentSQL . append ( msSql ) ;
2018-09-27 16:17:06 +08:00
ipnSegmentFields . add ( " start_ipn " ) ;
ipnSegmentFields . add ( " end_ipn " ) ;
ArrayList < Map < String , String > > omNodeMapList = dao . dbSelect ( ipnSegmentSQL . toString ( ) , ipnSegmentFields ) ;
StringBuffer omNodeSql = new StringBuffer ( " select distinct nt.seq_id from node_table nt where 1=1 " ) ;
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : omNodeMapList ) {
omNodeSql . append ( " and (ipn < ' " + map . get ( " start_ipn " ) + " ' or ipn > ' " + map . get ( " end_ipn " ) + " ') " ) ;
}
}
omNodeSql . append ( " and nt.seq_id in ( " + uuidStr + " ) " ) ;
ArrayList < String > omNodeFields = new ArrayList < String > ( ) ;
omNodeFields . add ( " seq_id " ) ;
omNodeMapList = dao . dbSelect ( omNodeSql . toString ( ) , omNodeFields ) ;
//循环插入结果信息
String sql = " insert into mission_result_table4 (mission_id,seq_id,result,result_desc) values (?,?,?,?) " ;
LinkedList < String [ ] > params = new LinkedList < String [ ] > ( ) ;
//查询当前任务的执行节点中上一周期下发失败的节点-2013-9-27 hyx
//过滤失败的思路有问题,应该过滤下发成功的,未知的默认下发失败,再次下发
String assignSuccessSeqIds = " " ;
if ( resultValue = = 40 ) {
assignSuccessSeqIds = getAssignSuccessSeqIdsByMiss ( curMissionId ) ;
System . out . println ( " curMissId= " + curMissionId + " ,OKSeqIds= " + assignSuccessSeqIds ) ;
logger . info ( " curMissId= " + curMissionId + " ,OKSeqIds= " + assignSuccessSeqIds ) ;
}
boolean hasAssignFailNode = false ; //不一定是真下发失败,当未知时,默认下发失败
// String assignFailSeqIds = "";
// if(resultValue==40) {
// assignFailSeqIds = getAssignFailSeqIdsByMiss(curMissionId);//当前任务当前周期的当前节点之前的状态
// System.out.println("curMissId="+curMissionId+",failSeqIds="+assignFailSeqIds);
// logger.info("curMissId="+curMissionId+",failSeqIds="+assignFailSeqIds);
// }
//由于其他地方导致的缓存中的轮次信息的state和数据库中的不一致, 对于已经有结果的, 还要初始化, 所以此处验证一下, 如果已经有结果了, 则不做插入操作
ArrayList < String > hasRltFields = new ArrayList < String > ( ) ;
hasRltFields . add ( " result " ) ;
hasRltFields . add ( " result_detail " ) ;
ArrayList < Map < String , String > > hasRltList = dao . dbSelect ( " select mrt4.result,mrt4.result_detail from mission_result_table4 mrt4 where mrt4.mission_id= " + curMissionId , hasRltFields ) ;
if ( hasRltList ! = null & & hasRltList . size ( ) = = 0 ) { //此处只能防止之前插入过此次不允许重复插入, 不能防止此次插入重复的记录( curMissId+seqId) , 也不需要, 因为表中设置了联合主键
node : for ( Map < String , String > nodeMap : nodeMapList ) {
String seqIdTmp = nodeMap . get ( " seq_id " ) + " " ;
if ( " 0 " . equals ( nodeMap . get ( " node_type " ) ) ) { //服务器节点
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
omNode : for ( Map < String , String > map : omNodeMapList ) {
if ( seqIdTmp . equals ( map . get ( " seq_id " ) ) ) { //管理范围外节点失败结果
2018-11-02 15:59:26 +08:00
//params.add(new String[]{curMissionId.longValue()+"",seqIdTmp,"1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE});
2018-09-27 16:17:06 +08:00
continue node ;
}
}
}
//可下发服务器节点
if ( resultValue = = 40 ) { //周期任务再次初始化任务结果时, 对于下发失败的, 要初始化为下发中状态: 3
//对于当前任务的执行节点中下发失败的节点, 并将任务结果初始化为3, 然后进行下发
System . out . println ( " 所有的的seq " + seqIdTmp ) ;
logger . info ( " 所有的的seq " + seqIdTmp ) ;
if ( ! assignSuccessSeqIds . contains ( " , " + seqIdTmp + " , " ) ) {
System . out . println ( " 下发失败的seq " + seqIdTmp ) ;
logger . info ( " 下发失败的seq " + seqIdTmp ) ;
hasAssignFailNode = true ;
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , " 3 " , null } ) ;
} else {
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , resultValue + " " , null } ) ;
}
} else {
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , resultValue + " " , null } ) ;
}
} else { //非服务器
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , " 1 " , MissionConstants . ERROR_RESULT_NOT_SERVER } ) ;
}
}
}
//当之前周期有下发失败的节点时,本周期继续进行下发:,2,( 其实是将需要下发的任务id加入到对应的list)
if ( hasAssignFailNode ) {
MissionStateTable mission = getMissionInfoByCurMissionId ( curMissionId ) ;
String [ ] missIds = new String [ 1 ] ;
if ( mission ! = null & & mission . getMissionId ( ) ! = null ) {
missIds [ 0 ] = mission . getMissionId ( ) + " " ;
Common . addAssignFailMissionIds ( mission . getMissionId ( ) + " " ) ;
}
}
//-- 修改周期任务状态为 mission_state 开始执行2 或6
if ( resultValue = = 3 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state =? where mst.cur_mission_id=? " , MissionConstants . MISSION_STATE_RUNNING_OK , curMissionId . longValue ( ) ) ;
} else if ( resultValue = = 5 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state =? where mst.cur_mission_id=? " , MissionConstants . MISSION_STATE_CANCEL_RUNNING_OK , curMissionId . longValue ( ) ) ;
}
dao . dbUpdateByBatch ( sql , params ) ;
} else {
//无节点任务 将周期置为无效
dao . dbUpdate ( " update mission_state_table mst set mst.AUTO_DESC=? where mst.mission_id in (select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id=? ) "
, format . format ( new Date ( ) ) + " " + MissionConstants . ERROR_TASK_RUND_NO_USED_NODE
, curMissionId . longValue ( ) ) ;
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = ? where mst.cur_mission_id= ? " , MissionConstants . MISSION_STATE_RUNNING_FAIL , curMissionId . longValue ( ) ) ;
}
dao . commit ( ) ;
} catch ( Exception e ) {
dao . rollback ( ) ;
throw e ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 初始化所有节点都不通的周期任务的结果 : 过期的插入下发失败的结果
* 1 . 查询未过期的周期 , 插入结果3
* 2 . 查询过期的周期 , 且未插入结果的 , 插入1 , 41
* /
public void initLoopMissionForAssignFail ( Long curMissionId , String nodeGroupId , String nodeIpsId , int resultVal , Integer resultDetail ) throws Exception {
/* 参数校验 */
if ( curMissionId = = null | | curMissionId . longValue ( ) = = 0 ) {
return ;
}
String rltDetailStr = resultDetail = = null ? " " : resultDetail + " " ;
/* 任务初始化业务 */
try {
dao . setAutoCommit ( false ) ;
ArrayList < String > msFields = new ArrayList < String > ( ) ;
StringBuffer msSQL = new StringBuffer ( ) ;
//即时判断任务状态是否为已创建状态
msFields . add ( " mission_state " ) ;
msSQL . append ( " select mst.mission_state from loopmission_state_table mst where mst.cur_mission_id = " + curMissionId . longValue ( ) + " and (mst.mission_state <> " + MissionConstants . MISSION_STATE_FINISHING + " or mst.mission_state <> " + MissionConstants . MISSION_STATE_CANCEL_FINISHING + " ) " ) ;
ArrayList < Map < String , String > > missionSateMap = dao . dbSelect ( msSQL . toString ( ) , msFields ) ;
if ( missionSateMap = = null | | missionSateMap . size ( ) = = 0 ) {
return ;
}
//查询需要插入结果的节点
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
StringBuffer nodeSQL = new StringBuffer ( ) ;
//查询任务下发节点
nodeFields . add ( " seq_id " ) ;
nodeFields . add ( " node_type " ) ;
nodeSQL . append ( " select distinct nt.seq_id,nt.node_type " ) ;
nodeSQL . append ( " from node_table nt " ) ;
nodeSQL . append ( " where 1 = 1 " ) ;
nodeSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
nodeSQL . append ( " and nt.node_state = 0 " ) ;
if ( StringUtils . isNotBlank ( nodeIpsId ) ) {
nodeSQL . append ( " and nt.NODE_ID in( " + nodeIpsId + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( nodeGroupId ) ) {
// nodeSQL.append(" and nt.node_group_id in( select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 start with nt.group_id in ("+nodeGroupId+") connect by prior nt.group_id = nt.parent_group_id )");
//@2018年4月26日15:57:27 适配mysql 数据库
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + nodeGroupId + " ) " , " group_id " , " parent_group_id " ) ;
nodeSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
// 任务下发节点
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
//拼写uuid串, 用于校验管理范围外IP
StringBuffer uuidStr = new StringBuffer ( " 0 " ) ;
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
uuidStr . append ( " , " + map . get ( " seq_id " ) ) ;
}
}
//查询任务下发节点sql-管理范围外节点
ArrayList < String > ipnSegmentFields = new ArrayList < String > ( ) ;
StringBuffer ipnSegmentSQL = new StringBuffer ( " select sis.start_ipn,sis.end_ipn from server_ip_segment sis left join server_table st on st.id = sis.server_id where st.server_state='0' and nvl(sis.segment_state,0) <>-1 " ) ;
ipnSegmentFields . add ( " start_ipn " ) ;
ipnSegmentFields . add ( " end_ipn " ) ;
ArrayList < Map < String , String > > omNodeMapList = dao . dbSelect ( ipnSegmentSQL . toString ( ) , ipnSegmentFields ) ;
StringBuffer omNodeSql = new StringBuffer ( " select distinct nt.seq_id from node_table nt where 1=1 " ) ;
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : omNodeMapList ) {
omNodeSql . append ( " and (ipn < ' " + map . get ( " start_ipn " ) + " ' or ipn > ' " + map . get ( " end_ipn " ) + " ') " ) ;
}
}
omNodeSql . append ( " and nt.seq_id in ( " + uuidStr + " ) " ) ;
ArrayList < String > omNodeFields = new ArrayList < String > ( ) ;
omNodeFields . add ( " seq_id " ) ;
omNodeMapList = dao . dbSelect ( omNodeSql . toString ( ) , omNodeFields ) ;
//循环插入结果信息
String sql = " insert into mission_result_table4 (mission_id,seq_id,result,result_detail,result_desc) values (?,?,?,?,?) " ;
LinkedList < String [ ] > params = new LinkedList < String [ ] > ( ) ;
//由于其他地方导致的缓存中的轮次信息的state和数据库中的不一致, 对于已经有结果的, 还要初始化, 所以此处验证一下, 如果已经有结果了, 则不做插入操作
ArrayList < String > hasRltFields = new ArrayList < String > ( ) ;
hasRltFields . add ( " result " ) ;
hasRltFields . add ( " result_detail " ) ;
ArrayList < Map < String , String > > hasRltList = dao . dbSelect ( " select mrt4.result,mrt4.result_detail from mission_result_table4 mrt4 where mrt4.mission_id= " + curMissionId , hasRltFields ) ;
if ( hasRltList ! = null & & hasRltList . size ( ) = = 0 ) {
node : for ( Map < String , String > nodeMap : nodeMapList ) {
String seqIdTmp = nodeMap . get ( " seq_id " ) + " " ;
if ( " 0 " . equals ( nodeMap . get ( " node_type " ) ) ) { //服务器节点
if ( omNodeMapList ! = null & & omNodeMapList . size ( ) > 0 ) {
omNode : for ( Map < String , String > map : omNodeMapList ) {
if ( seqIdTmp . equals ( map . get ( " seq_id " ) ) ) { //管理范围外节点失败结果
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , resultVal + " " , rltDetailStr , MissionConstants . ERROR_RESULT_UN_MANAGEMENT_NODE } ) ;
continue node ;
}
}
}
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , resultVal + " " , rltDetailStr , null } ) ;
} else { //非服务器
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , seqIdTmp , resultVal + " " , rltDetailStr , MissionConstants . ERROR_RESULT_NOT_SERVER } ) ;
}
}
}
//-- 修改周期任务状态为 mission_state 开始执行2 或6
if ( resultVal = = 3 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state =? where mst.cur_mission_id=? " , MissionConstants . MISSION_STATE_RUNNING_OK , curMissionId . longValue ( ) ) ;
} else if ( resultVal = = 5 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state =? where mst.cur_mission_id=? " , MissionConstants . MISSION_STATE_CANCEL_RUNNING_OK , curMissionId . longValue ( ) ) ;
}
dao . dbUpdateByBatch ( sql , params ) ;
}
// else{//此处不会执行到,既然之前周期确定为节点都不通,表明有执行节点
// //无节点任务 将周期置为无效
// dao.dbUpdate("update mission_state_table mst set mst.AUTO_DESC=? where mst.mission_id in (select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id=? )"
// , format.format(new Date())+" " +MissionConstants.ERROR_TASK_RUND_NO_USED_NODE
// ,curMissionId.longValue());
// dao.dbUpdate("update loopmission_state_table mst set mst.mission_state = ? where mst.cur_mission_id= ?",MissionConstants.MISSION_STATE_RUNNING_FAIL,curMissionId.longValue());
// }
//
dao . commit ( ) ;
} catch ( Exception e ) {
dao . rollback ( ) ;
throw e ;
} finally {
dao . clearConn ( ) ;
}
}
//查询当前任务的执行节点中上一周期下发失败的节点
private String getAssignFailSeqIdsByMiss ( Long curMissionId ) {
StringBuffer assignFailSeqIds = new StringBuffer ( " , " ) ;
try
{
if ( curMissionId ! = null ) {
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
StringBuffer nodeSQL = new StringBuffer ( ) ;
//查询任务下发节点---此sql有问题, 只查完成的, 如果之前没有完成的周期, 那就没有下发失败的节点, 其实是不知道是否下发成功, 应该默认下发失败才对, NC会过滤的
nodeFields . add ( " seq_id " ) ;
nodeSQL . append ( " select mrt4.seq_id from mission_result_table4 mrt4 " ) ; //3: 超找此周期中, 下发失败的: result=1 and resultDetail=41
nodeSQL . append ( " where mrt4.mission_id =( " ) ;
nodeSQL . append ( " select max(lst.cur_mission_id) " ) ; //2: (有可能查到的为null, 只有一个周期的, 或者之前都是未能执行的, 此为第一个周期)查找主任务中当前周期之前的, 且执行完成的一个周期的任务id( 会不会有的周期任务的结果还没过来, 导致查找的不对, 条件为: 小于当前周期的最大的周期, 且不为4未能执行的)
nodeSQL . append ( " from loopmission_state_table lst " ) ;
nodeSQL . append ( " where lst.mission_id = ( " ) ;
nodeSQL . append ( " select lstTmp.mission_id " ) ; //1: 超找当前周期对应的主任务id
nodeSQL . append ( " from loopmission_state_table lstTmp " ) ;
nodeSQL . append ( " where lstTmp.cur_mission_id= " + curMissionId + " ) " ) ;
//下面sql语句不能加state=2, 因为为2时, 可能结果为3 or 40 此时不知道是否下发成功, 应该默认下发失败, 再次下发才对, 重复下发, NC会过滤, 不会重复执行, 所以只能要state=3完成的, 我们才能准确判断
nodeSQL . append ( " and (lst.mission_state =3 ) and lst.cur_mission_id< " + curMissionId ) ; //lst.mission_state =3, 未能执行的在结果表不会有结果, 所以第一个条件! =4可以不加, 不行, 那就看之前是否有执行完成的?
nodeSQL . append ( " ) and mrt4.result=1 and mrt4.result_detail=41 " ) ;
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
assignFailSeqIds . append ( map . get ( " seq_id " ) + " , " ) ;
}
}
}
}
} catch ( Exception e )
{
logger . error ( " The node that failed to query the current task during the previous cycle is curMissionId= " + curMissionId + " abnormal " , e ) ;
}
return assignFailSeqIds . toString ( ) ;
}
//查询当前任务的执行节点中上一周期下发失败的节点
private String getAssignSuccessSeqIdsByMiss ( Long curMissionId ) {
StringBuffer assignFailSeqIds = new StringBuffer ( " , " ) ;
try
{
if ( curMissionId ! = null ) {
ArrayList < String > nodeFields = new ArrayList < String > ( ) ;
StringBuffer nodeSQL = new StringBuffer ( ) ;
//查询任务下发节点
nodeFields . add ( " seq_id " ) ;
nodeSQL . append ( " select distinct mrt4.seq_id from mission_result_table4 mrt4 " ) ;
nodeSQL . append ( " where mrt4.mission_id in( " ) ;
nodeSQL . append ( " select lst.cur_mission_id " ) ; //查找当前周期之前所有周期的任务id
nodeSQL . append ( " from loopmission_state_table lst " ) ;
nodeSQL . append ( " where lst.mission_id = ( " ) ;
nodeSQL . append ( " select lstTmp.mission_id " ) ;
nodeSQL . append ( " from loopmission_state_table lstTmp " ) ;
nodeSQL . append ( " where lstTmp.cur_mission_id= " + curMissionId + " ) " ) ;
nodeSQL . append ( " and lst.cur_mission_id< " + curMissionId ) ;
nodeSQL . append ( " ) and mrt4.result in (0,40,50,60,70,80) " ) ; //查一定 下发成功 的节点,对于result=1, result_detail! =41的, 也可能是下发失败( 周期任务超时时将3修改为1, 不过这种情况影响不大)
// nodeSQL.append(" ) and ( mrt4.result in (0,40,50,60,70,80) or ");//查一定 下发成功 的节点
// nodeSQL.append(" (mrt4.result=1 and (mrt4.result_detail is null or mrt4.result_detail !=41))");
// nodeSQL.append(" )");
ArrayList < Map < String , String > > nodeMapList = dao . dbSelect ( nodeSQL . toString ( ) , nodeFields ) ;
if ( nodeMapList ! = null & & nodeMapList . size ( ) > 0 ) {
for ( Map < String , String > map : nodeMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " seq_id " ) ) ) {
assignFailSeqIds . append ( map . get ( " seq_id " ) + " , " ) ;
}
}
}
}
} catch ( Exception e )
{
logger . error ( " The node that succeeds in the last cycle of the execution node for the current task is querying,curMissionId= " + curMissionId + " abnormal " , e ) ;
}
return assignFailSeqIds . toString ( ) ;
}
/ * *
* 统计周期任务中 , 执行节点全都不通的情况 :
* 1 . 最近的一个周期 : 1 - 41 或者 3 ( 多次下发也没关系 , NC会自动过滤 , 不会多次执行 )
* 2 . 更新loop表的state : 2 or 4
*
* /
public List < String > checkLoopMissAssignFail ( ) {
List < String > assignFailMissIds = new ArrayList < String > ( ) ;
try
{
ArrayList < String > missFields = new ArrayList < String > ( ) ;
StringBuffer missSQL = new StringBuffer ( ) ;
//查询任务下发节点
missFields . add ( " mission_id " ) ;
missFields . add ( " cur_mission_id " ) ;
missFields . add ( " nodeNum " ) ;
missFields . add ( " assignFailNum " ) ;
missFields . add ( " node_groups_id " ) ;
missFields . add ( " node_ips_id " ) ;
Date sysdateD = new Date ( ) ;
String sysdate = format . format ( sysdateD ) ; //为了统一时间, 都去DC的时间
//查找所有节点都不通的周期任务相关的信息
missSQL . append ( " select tmp.mission_id,tmp.maxCurMissId cur_mission_id,tmp.nodeNum,tmp.assignFailNum,mpt4.node_groups_id,mpt4.node_ips_id " ) ;
missSQL . append ( " from ( " ) ;
missSQL . append ( " select tmp1.mission_id,tmp1.maxCurMissId,count(*) nodeNum, " ) ;
missSQL . append ( " sum(case when mrt4.result=1 and mrt4.result_detail=41 then 1 else 0 end) assignFailNum " ) ;
missSQL . append ( " from " ) ;
missSQL . append ( " ( " ) ;
missSQL . append ( " select mst.mission_id,max(lst.cur_mission_id) maxCurMissId " ) ;
missSQL . append ( " from mission_state_table mst " ) ;
missSQL . append ( " left join loopmission_state_table lst on lst.mission_id=mst.mission_id " ) ;
missSQL . append ( " left join mission_result_table4 mrt4 on mrt4.mission_id=lst.cur_mission_id " ) ;
missSQL . append ( " where mst.mission_type=4 and mst.is_loop=1 and mst.end_time>to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') " ) ; //对于过期的, loop表的state为未能执行
missSQL . append ( " and mst.mission_state=2 " ) ; //总任务状态为执行中
missSQL . append ( " and lst.mission_state in (3,2) " ) ; //中间有未能执行的也没关系, 只要执行完成的最新的一个周期是都不通, 就认为都不通。如果加上2的状态, 则下发中的周期就不会认为是网络都不通的情况, 这样就不会再去下发了, 所以还是要加2的状态的
missSQL . append ( " group by mst.mission_id " ) ;
missSQL . append ( " )tmp1 " ) ;
missSQL . append ( " left join mission_result_table4 mrt4 on mrt4.mission_id=tmp1.maxCurMissId " ) ;
missSQL . append ( " group by tmp1.mission_id,tmp1.maxCurMissId " ) ;
missSQL . append ( " )tmp " ) ;
missSQL . append ( " left join mission_parameter_table4 mpt4 on mpt4.mission_id = tmp.mission_id " ) ;
missSQL . append ( " left join loopmission_state_table lst2 on lst2.cur_mission_id=tmp.maxCurMissId " ) ;
missSQL . append ( " where tmp.nodeNum=assignFailNum and tmp.mission_id is not null and tmp.maxCurMissId is not null " ) ;
ArrayList < Map < String , String > > missMapList = dao . dbSelect ( missSQL . toString ( ) , missFields ) ;
//有记录就说明存在全部通的周期任务
if ( missMapList ! = null & & missMapList . size ( ) > 0 ) {
String initRltCurMissIdSql = " select case when lst.end_time>to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') and lst.start_time<=to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') then lst.cur_mission_id end toAssign , " + //下发失败后,再次下发时,要在周期时间内,不在周期时间内,不进行下发
" case when lst.end_time<=to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') then lst.cur_mission_id end assignFail " +
" from loopmission_state_table lst " +
" left join mission_state_table mst on mst.mission_id=lst.mission_id " +
" left join mission_result_table4 mrt4 on lst.cur_mission_id=mrt4.mission_id " +
" where lst.mission_id=? and lst.cur_mission_id>? and mrt4.result is null and mst.mission_state in (2,6) " + //总任务状态为已完成的就不初始化结果了
" and (lst.end_time<=to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') or (lst.start_time<=to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') and lst.end_time>to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') )) " + //下发失败后,再次下发时,要在周期时间内,不在周期时间内,不进行下发
" order by toAssign asc " ;
ArrayList < String > curMissFields = new ArrayList < String > ( ) ;
curMissFields . add ( " toAssign " ) ;
curMissFields . add ( " assignFail " ) ;
for ( Map < String , String > map : missMapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
assignFailMissIds . add ( map . get ( " mission_id " ) ) ;
//初始化任务结果:下发中
Long missId = Long . parseLong ( map . get ( " mission_id " ) ) ;
Long curMissId = Long . parseLong ( map . get ( " cur_mission_id " ) ) ;
MissionStateTable mission = this . getMessionById ( missId ) ;
String nodeGroupIds = map . get ( " node_groups_id " ) ;
String nodeIds = map . get ( " node_ips_id " ) ;
//如果已经有结果了,就不要再进行插入结果,过了时间的周期直接默认插入下发失败的结果:因为是全不通,所以要所有节点都插入下发中的结果
ArrayList < Map < String , String > > missCurMissMapList = dao . dbSelect ( initRltCurMissIdSql , curMissFields , missId , curMissId ) ;
boolean assignOneFlag = true ;
if ( missCurMissMapList ! = null & & missCurMissMapList . size ( ) > 0 ) {
for ( Map < String , String > mapTmp : missCurMissMapList ) {
LoopMissionRoundInfo roundInfo = null ;
if ( StringUtils . isNotBlank ( mapTmp . get ( " toAssign " ) ) & & assignOneFlag ) { //初始化下发结果:只初始化最近的未过期的一个周期,可能周期未执行完毕
//未过期的,下发
Long toAssignCurMissId = Long . parseLong ( mapTmp . get ( " toAssign " ) ) ;
//-- 轮次校验和初始化
checkAndInitMissionCycle ( mission ) ;
//-- 获取当前周期轮次
List < LoopMissionRoundInfo > roundInfoList = Common . getLoopMissionRoundInfoList ( ) . get ( missId ) ;
if ( roundInfoList ! = null & & roundInfoList . size ( ) > 0 ) {
//-- 获取当前周期轮次
for ( Iterator < LoopMissionRoundInfo > roundIte = roundInfoList . iterator ( ) ; roundIte . hasNext ( ) ; ) {
roundInfo = roundIte . next ( ) ;
if ( roundInfo . getEndTime ( ) . compareTo ( sysdateD ) = = 1 ) { //大于
break ;
}
}
logger . info ( " 当前轮次的id " + roundInfo . getCurMissionId ( ) + " ,主id " + missId ) ;
}
//-- 预置状态的轮次,初始化当前轮次的结果数据
if ( roundInfo ! = null & & roundInfo . getMissionState ( ) ! = null & & roundInfo . getMissionState ( ) . longValue ( ) = = 0l | | roundInfo . getMissionState ( ) . longValue ( ) = = 1l ) { //0 预置状态,未初始化当前轮次的任务结果信息
initLoopMissionForAssignFail ( toAssignCurMissId , nodeGroupIds , nodeIds , 3 , null ) ; //初始化无需下发的结果信息 3开始执行 40已下发,修改loop表的状态为执行中2
roundInfo . setMissionState ( 2l ) ; //更新缓存中的任务轮次信息状态
}
assignOneFlag = false ; //只将符合条件( 无结果, 周期结束时间未过) 的最小的一个周期的执行结果修改为下发中3
continue ;
}
if ( StringUtils . isNotBlank ( mapTmp . get ( " assignFail " ) ) ) { //过期的: 都初始化为4
Long assignFailCurMissId = Long . parseLong ( mapTmp . get ( " assignFail " ) ) ;
//-- 轮次校验和初始化
checkAndInitMissionCycle ( mission ) ;
//-- 获取当前周期轮次
List < LoopMissionRoundInfo > roundInfoList = Common . getLoopMissionRoundInfoList ( ) . get ( missId ) ;
if ( roundInfoList ! = null & & roundInfoList . size ( ) > 0 ) {
//-- 获取当前周期轮次
for ( Iterator < LoopMissionRoundInfo > roundIte = roundInfoList . iterator ( ) ; roundIte . hasNext ( ) ; ) {
roundInfo = roundIte . next ( ) ;
if ( roundInfo . getEndTime ( ) . compareTo ( sysdateD ) = = 1 ) { //大于
break ;
}
}
}
//过期的,插入结果
if ( roundInfo ! = null ) {
updateLoopMissionState ( assignFailCurMissId , 4 ) ; //修改loop表的状态为未能执行4, 不需要插入结果了就
roundInfo . setMissionState ( 4l ) ;
}
continue ;
}
}
}
}
}
}
} catch ( Exception e )
{
logger . error ( " In the statistical periodic task, the execution nodes are all blocked " , e ) ;
}
return assignFailMissIds ;
}
/ * *
* 针对任务已创建状态的任务 , 为其初始化结果集
* 最大精确到组的任务结果记录插入
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* @param curMissionId 任务Id
* @param systemId 系统Id
* /
public void initLoopMissionResults ( Long curMissionId , String groupsId , String nodeIpsId , int resultValue ) throws Exception {
if ( curMissionId = = null | | curMissionId . longValue ( ) = = 0 ) {
return ;
}
ArrayList < String > fields = new ArrayList < String > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_state from loopmission_state_table mst where mst.cur_mission_id = " + curMissionId . longValue ( ) + " and mst.mission_state<>3 " ) ;
fields . add ( " mission_state " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
if ( rs . get ( 0 ) ! = null & & StringUtils . isNotEmpty ( rs . get ( 0 ) . get ( " mission_state " ) ) & & ( " 2 " . equals ( rs . get ( 0 ) . get ( " mission_state " ) . trim ( ) ) | | " 6 " . equals ( rs . get ( 0 ) . get ( " mission_state " ) . trim ( ) ) ) ) {
return ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
}
searchSQL . delete ( 0 , searchSQL . length ( ) ) ;
searchSQL . append ( " select distinct nt.seq_id " ) ;
searchSQL . append ( " from node_table nt " ) ;
searchSQL . append ( " where 1=1 " ) ;
searchSQL . append ( " and nvl(nt.seq_id,-1)<> -1 " ) ;
searchSQL . append ( " and nt.node_state = 0 " ) ;
if ( StringUtils . isNotBlank ( nodeIpsId ) ) {
searchSQL . append ( " and nt.NODE_ID in( " + nodeIpsId + " ) " ) ;
} else {
if ( StringUtils . isNotBlank ( groupsId ) ) {
// searchSQL.append(" and nt.node_group_id in( select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 start with nt.group_id in ("+groupsId+") connect by prior nt.group_id = nt.parent_group_id )");
//@2018年4月26日15:57:27 适配mysql 数据库
String startWithConnectBy = dao . startWithConnectBy ( " select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 " , " nt.group_id in ( " + groupsId + " ) " , " group_id " , " parent_group_id " ) ;
searchSQL . append ( " and nt.node_group_id in( " + startWithConnectBy + " ) " ) ;
}
}
// searchSQL.append(getIpnSelect());
fields . clear ( ) ;
fields . add ( " seq_id " ) ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 循环插入结果信息
dao . setAutoCommit ( false ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
String sql = " insert into mission_result_table4 (mission_id,seq_id,result) values (?,?,?) " ;
LinkedList < String [ ] > params = new LinkedList < String [ ] > ( ) ;
for ( Map < String , String > maps : rs ) {
params . add ( new String [ ] { curMissionId . longValue ( ) + " " , maps . get ( " seq_id " ) + " " , resultValue + " " } ) ;
}
//-- 修改任务状态为 mission_state = 1 以创建 BUG loop state =5 的情况
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = 1 where mst.cur_mission_id= " + curMissionId . longValue ( ) ) ;
dao . dbUpdateByBatch ( sql , params ) ;
}
dao . commit ( ) ;
} catch ( Exception e ) {
try {
dao . rollback ( ) ;
} catch ( Exception e1 ) {
logger . error ( " " , e1 ) ;
}
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
public Task1 getTask1ById ( Long missionId ) {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return null ;
}
Task1 task1 = new Task1 ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mpt1.node_groups_id,mpt1.command_para,mpt1.NODE_IPS_ID " ) ;
searchSQL . append ( " from mission_parameter_table1 mpt1 " ) ;
searchSQL . append ( " where mpt1.mission_Id=' " + missionId . longValue ( ) + " ' " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " node_groups_id " ) ;
fields . add ( " NODE_IPS_ID " ) ;
fields . add ( " command_para " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > maps = rs . get ( 0 ) ;
task1 . setTaskParam ( StringUtils . isEmpty ( maps . get ( " command_para " ) ) ? null : maps . get ( " command_para " ) ) ;
task1 . setNodeGroupsId ( StringUtils . isEmpty ( maps . get ( " node_groups_id " ) ) ? null : maps . get ( " node_groups_id " ) ) ;
task1 . setNodeIpsId ( StringUtils . isEmpty ( maps . get ( " NODE_IPS_ID " ) ) ? null : maps . get ( " NODE_IPS_ID " ) ) ;
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return task1 ;
}
public String getHostIpByMissionId ( Long mId ) {
String hostIp = null ;
StringBuffer searchSQL = new StringBuffer ( ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " system_ip " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( " select st.system_ip from system_table st,mission_state_table mst where mst.system_id = st.system_id and mst.mission_id=' " + mId . longValue ( ) + " ' " , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > map = ( Map < String , String > ) rs . get ( 0 ) ;
hostIp = StringUtils . isEmpty ( map . get ( " system_ip " ) ) ? null : StringUtils . trim ( map . get ( " system_ip " ) ) ;
}
} catch ( Exception e ) {
logger . error ( " MissionId is: " + mId + " ServerIp acquisition failure " , e ) ;
}
if ( StringUtils . isEmpty ( hostIp ) ) {
logger . error ( " missionId is: " + mId + " ServerIp is empty " ) ;
}
return hostIp ;
}
public String getHostIpBySystemId ( Long systemId ) {
String hostIp = null ;
StringBuffer searchSQL = new StringBuffer ( ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " system_ip " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( " select st.system_ip from system_table st where st.system_id=' " + systemId . longValue ( ) + " ' " , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > map = ( Map < String , String > ) rs . get ( 0 ) ;
hostIp = StringUtils . isEmpty ( map . get ( " system_ip " ) ) ? null : StringUtils . trim ( map . get ( " system_ip " ) ) ;
}
} catch ( Exception e ) {
logger . error ( " SystemId 为: " + systemId + " ServerIp acquisition failure " , e ) ;
}
if ( StringUtils . isEmpty ( hostIp ) ) {
logger . error ( " SystemId 为: " + systemId + " ServerIp is empty " ) ;
}
return hostIp ;
}
public List < FileComment > getMissionFileInformations ( Long missionId ) {
List < FileComment > pushFileList = new LinkedList < FileComment > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " file_name " ) ;
fields . add ( " md5_value " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( " select mfi.file_name,mfi.md5_value from mission_file_information mfi where mfi.mission_id=' " + missionId . longValue ( ) + " ' order by mfi.id asc " , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Iterator iterator = rs . iterator ( ) ; iterator . hasNext ( ) ; ) {
Map < String , String > map = ( Map < String , String > ) iterator . next ( ) ;
// String[] strings = new String[]{map.get("file_name"),map.get("md5_value")};
pushFileList . add ( new FileComment ( map . get ( " file_name " ) , 0 , 0 , map . get ( " md5_value " ) ) ) ;
}
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
return pushFileList ;
}
public List < FileComment > getMissionFileInformations2 ( Long missionId ) {
List < FileComment > pushFileList = new LinkedList < FileComment > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " file_name " ) ;
fields . add ( " md5_value " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( " select mfi.file_name,mfi.md5_value from mission_file_information mfi where mfi.mission_id=' " + missionId . longValue ( ) + " ' order by mfi.id asc " , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Iterator iterator = rs . iterator ( ) ; iterator . hasNext ( ) ; ) {
Map < String , String > map = ( Map < String , String > ) iterator . next ( ) ;
// String[] strings = new String[]{map.get("file_name"),map.get("md5_value")};
pushFileList . add ( new FileComment ( map . get ( " file_name " ) , 0 , 0 , map . get ( " md5_value " ) ) ) ;
}
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
return pushFileList ;
}
public boolean checkFileIntegrity ( String fileSrc , String md5Val ) {
File file = new File ( fileSrc ) ;
try {
//不存在 Return false
if ( ! file . exists ( ) ) {
return false ;
}
//比较MD5值
String md5Val0 = MD5Util . getFileMD5String ( file ) ;
if ( ! md5Val0 . equals ( md5Val ) ) {
file . delete ( ) ;
return false ;
} else
return true ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
return false ;
}
}
public Task4 getTask4ById ( Long missionId ) {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return null ;
}
Task4 task4 = new Task4 ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mpt4.command_Type, " ) ;
searchSQL . append ( " mpt4.command_ename, " ) ;
searchSQL . append ( " mpt4.command_para, " ) ;
searchSQL . append ( " mpt4.node_groups_id, " ) ;
searchSQL . append ( " mpt4.NODE_IPS_ID, " ) ;
searchSQL . append ( " mpt4.max_return, " ) ;
searchSQL . append ( " mpt4.version " ) ;
searchSQL . append ( " from mission_parameter_table4 mpt4 " ) ;
searchSQL . append ( " where mpt4.mission_Id=' " + missionId . longValue ( ) + " ' " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " command_Type " ) ;
fields . add ( " command_ename " ) ;
fields . add ( " command_para " ) ;
fields . add ( " node_groups_id " ) ;
fields . add ( " NODE_IPS_ID " ) ;
fields . add ( " version " ) ;
ArrayList < Map < String , String > > rs = null ;
// MissionResult result = new MissionResult();
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
String split = " ; " ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > maps = rs . get ( 0 ) ;
task4 . setCommandName ( maps . get ( " command_ename " ) ) ;
task4 . setCommandType ( StringUtils . isEmpty ( maps . get ( " command_Type " ) ) ? null : Long . parseLong ( maps . get ( " command_Type " ) ) ) ;
task4 . setVersion ( StringUtils . isEmpty ( maps . get ( " version " ) ) ? null : Long . parseLong ( maps . get ( " version " ) ) ) ;
task4 . setNodeGroupsId ( StringUtils . isEmpty ( maps . get ( " node_groups_id " ) ) ? null : maps . get ( " node_groups_id " ) ) ;
task4 . setNodeIpsId ( StringUtils . isEmpty ( maps . get ( " NODE_IPS_ID " ) ) ? null : maps . get ( " NODE_IPS_ID " ) ) ;
if ( StringUtils . isNotEmpty ( maps . get ( " command_para " ) ) ) {
StringBuffer newStrs = new StringBuffer ( ) ;
String [ ] strs = maps . get ( " command_para " ) . split ( " ; " ) ;
for ( String str : strs ) {
if ( DateUtil . isDate ( str , Constants . COMMON_DATE_FORMAT ) ) {
newStrs . append ( split + format . parse ( str ) . getTime ( ) ) ;
} else {
newStrs . append ( split + str ) ;
}
}
newStrs = newStrs . length ( ) > 0 ? newStrs . delete ( 0 , split . length ( ) ) : newStrs ;
task4 . setCommandParam ( newStrs . toString ( ) ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return task4 ;
}
public Task6 getTask6ById ( Long missionId ) {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return null ;
}
Task6 task6 = new Task6 ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mpt6.command_Type, " ) ;
searchSQL . append ( " mpt6.command_ename, " ) ;
searchSQL . append ( " mpt6.command_para, " ) ;
searchSQL . append ( " mpt6.node_groups_id, " ) ;
searchSQL . append ( " mpt6.NODE_IPS_ID, " ) ;
searchSQL . append ( " mpt6.source_path, " ) ;
searchSQL . append ( " mpt6.target_path, " ) ;
searchSQL . append ( " mpt6.check_value, " ) ;
searchSQL . append ( " mpt6.old_task_id, " ) ;
searchSQL . append ( " to_char(mpt6.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " mpt6.version " ) ;
searchSQL . append ( " from mission_parameter_table6 mpt6 " ) ;
searchSQL . append ( " where mpt6.mission_Id=' " + missionId . longValue ( ) + " ' " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " command_Type " ) ;
fields . add ( " command_ename " ) ;
fields . add ( " command_para " ) ;
fields . add ( " source_path " ) ;
fields . add ( " target_path " ) ;
fields . add ( " check_value " ) ;
fields . add ( " start_time " ) ;
fields . add ( " node_groups_id " ) ;
fields . add ( " NODE_IPS_ID " ) ;
fields . add ( " old_task_id " ) ;
fields . add ( " version " ) ;
ArrayList < Map < String , String > > rs = null ;
// MissionResult result = new MissionResult();
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
// String split = ";";
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
Map < String , String > maps = rs . get ( 0 ) ;
task6 . setCommandName ( maps . get ( " command_ename " ) ) ;
task6 . setCommandType ( StringUtils . isEmpty ( maps . get ( " command_Type " ) ) ? null : Long . parseLong ( maps . get ( " command_Type " ) ) ) ;
task6 . setCommandParam ( maps . get ( " command_para " ) ) ;
task6 . setVersion ( StringUtils . isEmpty ( maps . get ( " version " ) ) ? null : Long . parseLong ( maps . get ( " version " ) ) ) ;
task6 . setNodeGroupsId ( StringUtils . isEmpty ( maps . get ( " node_groups_id " ) ) ? null : maps . get ( " node_groups_id " ) ) ;
task6 . setNodeIpsId ( StringUtils . isEmpty ( maps . get ( " NODE_IPS_ID " ) ) ? null : maps . get ( " NODE_IPS_ID " ) ) ;
task6 . setOldTaskId ( StringUtils . isEmpty ( maps . get ( " old_task_id " ) ) ? null : Long . parseLong ( maps . get ( " old_task_id " ) ) ) ;
task6 . setFileName ( maps . get ( " source_path " ) ) ;
task6 . setDestPath ( maps . get ( " target_path " ) ) ;
task6 . setMd5Value ( maps . get ( " check_value " ) ) ;
task6 . setUpgradeTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) . getTime ( ) ) ;
// if(StringUtils.isNotEmpty(maps.get("command_para"))){
// StringBuffer newStrs = new StringBuffer();
// String[] strs = maps.get("command_para").split(";");
// for(String str : strs){
// if(DateUtil.isDate(str,Constants.COMMON_DATE_FORMAT)){
// newStrs.append(split+format.parse(str).getTime());
// }else{
// newStrs.append(split+str);
// }
// }
// newStrs = newStrs.length()>0?newStrs.delete(0, split.length()):newStrs;
// }
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return task6 ;
}
/ * *
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* 文件推送任务 执行结果查询
* 文件推送结果 result 的值有
* 3 任务信息下发中
* 40 任务信息下发成功 ( 信息有NMSAgent端提供 )
* 41 任务信息下发失败 ( 信息有DataController端提供 )
* @param missionId 任务Id
* @param missionState 任务的状态
*
* /
public ArrayList < MissionResult > getMissionResultsForTask ( long missionId , int missionType ) {
if ( missionType = = 0 | | missionId = = 0l ) {
return null ;
}
ArrayList < MissionResult > mrList = new ArrayList < MissionResult > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mrt.mission_id, " ) ;
searchSQL . append ( " nt.node_ip, " ) ;
searchSQL . append ( " mrt.seq_id, " ) ;
searchSQL . append ( " nvl(mrt.result,3) result " ) ;
searchSQL . append ( " from mission_result_table " + missionType + " mrt " ) ;
searchSQL . append ( " left join (select distinct node_ip,ipn,seq_id from node_table n ) nt on nt.seq_id=mrt.seq_id " ) ;
searchSQL . append ( " where mrt.mission_id = " + missionId + " " ) ;
searchSQL . append ( " and nvl(mrt.result,3) =3 " ) ;
searchSQL . append ( getIpnSelect ( ) ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " node_ip " ) ;
fields . add ( " result " ) ;
fields . add ( " seq_id " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionResult result = new MissionResult ( ) ;
result . setMissionId ( Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
result . setNodeIp ( maps . get ( " node_ip " ) ) ;
result . setUuid ( maps . get ( " seq_id " ) = = null ? null : Long . parseLong ( maps . get ( " seq_id " ) ) ) ;
result . setResult ( maps . get ( " result " ) = = null ? null : Long . parseLong ( maps . get ( " result " ) ) ) ;
mrList . add ( result ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mrList ;
}
/ * *
* @time Oct 25 , 2011 - 11 : 00 : 08 AM
* 文件推送任务 执行结果查询
* 文件推送结果 result 的值有
* 3 任务信息下发中
* 40 任务信息下发成功 ( 信息有NMSAgent端提供 )
* 41 任务信息下发失败 ( 信息有DataController端提供 )
* @param missionId 任务Id
* @param missionState 任务的状态
*
* /
public ArrayList < MissionResult > getMissionResultsForLoopTask ( long missionId , int missionType , Integer resultVal ) {
if ( missionType = = 0 | | missionId = = 0l ) {
return null ;
}
ArrayList < MissionResult > mrList = new ArrayList < MissionResult > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mrt.mission_id, " ) ;
searchSQL . append ( " nt.node_ip, " ) ;
searchSQL . append ( " mrt.seq_id, " ) ;
searchSQL . append ( " nvl(mrt.result,3) result " ) ;
searchSQL . append ( " from mission_result_table " + missionType + " mrt " ) ;
searchSQL . append ( " left join loopmission_state_table lmst on lmst.cur_mission_id = mrt.mission_id " ) ;
searchSQL . append ( " left join (select distinct node_ip,ipn,seq_id from node_table n) nt on nt.seq_id=mrt.seq_id " ) ;
searchSQL . append ( " where lmst.mission_id = " + missionId + " " ) ;
if ( resultVal ! = null ) {
searchSQL . append ( " and nvl(mrt.result,3) = " + resultVal . intValue ( ) ) ;
}
searchSQL . append ( getIpnSelect ( ) ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " node_ip " ) ;
fields . add ( " result " ) ;
fields . add ( " seq_id " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
logger . debug ( searchSQL . toString ( ) ) ;
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionResult result = new MissionResult ( ) ;
result . setMissionId ( Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
result . setNodeIp ( maps . get ( " node_ip " ) ) ;
result . setUuid ( maps . get ( " seq_id " ) = = null ? null : Long . parseLong ( maps . get ( " seq_id " ) ) ) ;
result . setResult ( maps . get ( " result " ) = = null ? null : Long . parseLong ( maps . get ( " result " ) ) ) ;
mrList . add ( result ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mrList ;
}
//获取
public ArrayList < MissionResult > getMissionResultsForLoopTaskByCurMissId ( long curMissionId , Integer resultVal ) {
int missionType = 4 ;
if ( curMissionId = = 0l | | resultVal = = null ) {
return null ;
}
ArrayList < MissionResult > mrList = new ArrayList < MissionResult > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mrt.mission_id, " ) ;
searchSQL . append ( " nt.node_ip, " ) ;
searchSQL . append ( " mrt.seq_id, " ) ;
searchSQL . append ( " mrt.result result " ) ;
searchSQL . append ( " from mission_result_table " + missionType + " mrt " ) ;
// searchSQL.append("left join loopmission_state_table lmst on lmst.cur_mission_id = mrt.mission_id ");
searchSQL . append ( " left join (select distinct node_ip,ipn,seq_id from node_table n) nt on nt.seq_id=mrt.seq_id " ) ;
searchSQL . append ( " where mrt.mission_id = " + curMissionId + " " ) ;
if ( resultVal ! = null ) {
searchSQL . append ( " and mrt.result = " + resultVal . intValue ( ) ) ;
}
searchSQL . append ( getIpnSelect ( ) ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " node_ip " ) ;
fields . add ( " result " ) ;
fields . add ( " seq_id " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
logger . debug ( searchSQL . toString ( ) ) ;
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionResult result = new MissionResult ( ) ;
result . setMissionId ( Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
result . setNodeIp ( maps . get ( " node_ip " ) ) ;
result . setUuid ( maps . get ( " seq_id " ) = = null ? null : Long . parseLong ( maps . get ( " seq_id " ) ) ) ;
result . setResult ( maps . get ( " result " ) = = null ? null : Long . parseLong ( maps . get ( " result " ) ) ) ;
mrList . add ( result ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mrList ;
}
/ * *
* 批量更新任务结果方法业务流程
* 1 、 检查数据完整性 : 任务ID 、 任务类型 、 SeqID 、 任务结果 均不能为空
* 2 、 数据规整
* 周期任务结果处理流程 : ( 判定 loopFlag 为1或 - 1 )
* 2 . 1 、 获取 获取任务轮次信息 ;
* 2 . 2 、 规整数据
* 非周期任务结果处理流程 :
*
* @time Nov 16 , 2011 - 2 : 00 : 46 PM
* @param mr2List
* /
public void updateMissionResult2ByBatch ( int missiontype , List < MissionResult2 > mr2List ) throws Exception {
List < String [ ] > params = new ArrayList < String [ ] > ( ) ;
//-try{}finally{} 用于清理数据库连接
try {
//-任务结果List 非空判断
if ( mr2List ! = null & & mr2List . size ( ) > 0 ) {
//- 声明 本次业务操作的各对象变量
EmailService emailService = new EmailService ( dao ) ; //邮件功能
String sql = getUpdateSQL ( missiontype ) ; //获取更新sql
int count = 0 ; //计数器
StringBuffer cancelMissionStore = new StringBuffer ( " , " ) ; //撤销任务ID暂存
List < MissionStateTable > loopMissionIdofInsertRltList = new ArrayList < MissionStateTable > ( ) ; //记录有结果录入的周期任务的总id, 并进行轮次检查和更新( 因为如果没轮次了再检测, 可能任务的总状态就被统计为已完成了, 之后的结果也就不会被统计上了)
//- 遍历任务结果集
Iterator < MissionResult2 > mrIte = mr2List . iterator ( ) ;
while ( mrIte . hasNext ( ) ) {
/* 任务结果: 完整性校验、数据规整、保存 等操作 */
MissionResult2 mr = ( MissionResult2 ) mrIte . next ( ) ;
//- 完整性校验:
if ( mr = = null ) { //无效跳过
continue ;
}
if ( mr . getMissionId ( ) = = null
| | mr . getMissionType ( ) = = null
| | mr . getUuid ( ) = = null
// || mr.getResult() == null //结果为空时, 触发器会采用之前的结果, 回传文件的结果信息result为null, 所以之前的回传文件都为空
) { //无效跳过
continue ;
}
//- 数据规整:周期任务判断及处理
//- 任务类型4 周期任务结果处理 标识判断, loopFlag: 1周期任务标识 -1:Agent无法判断任务类型, 先尝试按周期任务处理
Long resultsMissionId = mr . getMissionId ( ) ;
if ( mr . getMissionType ( ) . longValue ( ) = = 4l
& & mr . getLoopFlag ( ) ! = null
& & ( mr . getLoopFlag ( ) . longValue ( ) = = 1l | | mr . getLoopFlag ( ) . longValue ( ) = = - 1l ) ) {
//-- 获取任务
MissionStateTable mission = Common . getLoopMissionInfoMap ( ) . get ( mr . getMissionId ( ) ) ; //总任务id
loopMissionIdofInsertRltList . add ( mission ) ;
if ( mission = = null ) {
mission = getMessionById ( mr . getMissionId ( ) ) ;
Common . getLoopMissionInfoMap ( ) . put ( mr . getMissionId ( ) , mission ) ;
}
LoopMissionRoundInfo roundInfo = this . getRoundInfoFromCommonList ( mr ) ;
if ( roundInfo = = null ) {
//-- 检查并预置轮次信息(执行撤销时不再运行)
if ( mission . getMissionState ( ) ! = 6l & & mission . getMissionState ( ) ! = 7l ) {
checkAndInitMissionCycle ( mission ) ; //检查预置轮次数
} else {
this . updateLoopMissionRoundInfo ( Common . getLoopMissionRoundInfoList ( ) , mission . getMissionId ( ) ) ; //更新指定周期任务ID的轮次信息
}
//-- 再次获取 缓存中的信息 否则 查询数据库(比较旧的轮次信息情况)
roundInfo = this . getRoundInfoFromCommonList ( mr ) ;
if ( roundInfo = = null ) {
roundInfo = this . getRoundInfoFromDB ( mr ) ;
//-- 该任务的轮次信息不存在 通过loopFlag 判断是否继续执行保存
/* loopFlag 为1 周期任务结果,则抛弃,为-1 未知情况,继续非周期任务信息结果的处理 */
if ( roundInfo = = null ) {
if ( mr . getLoopFlag ( ) . longValue ( ) = = 1l ) { //无效的 周期任务数据 抛弃
logger . warn ( " Unable to find cycle information of the cycle task result information 【 " + ( JSONObject . fromObject ( mr ) . toString ( ) ) + " 】 " ) ;
continue ;
} else { //Agent无法判断任务类型 可能为一次性执行的任务
// logger.info("对应的 roundInfo is null"+(JSONObject.fromObject(mr).toString()));
}
} else {
List < LoopMissionRoundInfo > rList = Common . getLoopMissionRoundInfoList ( ) . get ( mr . getMissionId ( ) ) ;
if ( rList = = null ) {
rList = new LinkedList < LoopMissionRoundInfo > ( ) ;
Common . getLoopMissionRoundInfoList ( ) . put ( mr . getMissionId ( ) , rList ) ;
}
rList . add ( 0 , roundInfo ) ;
}
}
}
//-- 当前轮次校验
if ( roundInfo ! = null & & roundInfo . getMissionState ( ) . longValue ( ) = = 0l ) { //结果未被初始化,周期内仅执行一次
// MissionStateTable mission = Common.getLoopMissionInfoMap().get(mr.getMissionId());
initLoopMissionResults2 ( roundInfo . getCurMissionId ( ) , mission . getNodeGroupsId ( ) , mission . getNodeIpsId ( ) , 40 ) ; //初始化无需下发的结果信息 3开始执行 40已下发
updateLoopMissionState ( roundInfo . getCurMissionId ( ) , 2 ) ;
roundInfo . setMissionState ( 2l ) ;
// checkAndInitMissionCycle(mission); //检查预置轮次数
} else
if ( roundInfo ! = null & & roundInfo . getMissionState ( ) . longValue ( ) = = 1l ) { //结果已经初始化,周期内仅执行一次
// MissionStateTable mission = Common.getLoopMissionInfoMap().get(mr.getMissionId());
updateLoopMissionState ( roundInfo . getCurMissionId ( ) , 2 ) ;
roundInfo . setMissionState ( 2l ) ;
// checkAndInitMissionCycle(mission); //检查预置轮次数
}
/ * * 无法获取轮次信息的数据跳过
* * /
if ( roundInfo ! = null ) { //轮次周期 状态为“已创建”,这变更状态并初始化下一轮次
resultsMissionId = roundInfo . getCurMissionId ( ) . longValue ( ) ;
}
logger . debug ( " MissionResult2 missionId 变更 :> " + ( mr . getMissionId ( ) + " ---> " + roundInfo . getCurMissionId ( ) . longValue ( ) ) ) ;
if ( mission . getMissionState ( ) . longValue ( ) = = 6 ) {
//-- 检查是否已发出通知
if ( roundInfo ! = null ) {
if ( cancelMissionStore . indexOf ( " , " + mr . getUuid ( ) + " : " + mr . getMissionId ( ) + " , " ) = = - 1 ) {
cancelMissionStore . append ( mr . getUuid ( ) + " : " + mr . getMissionId ( ) + " , " ) ;
if ( mr . getResult ( ) = = null | | ( mr . getResult ( ) . longValue ( ) ! = 6l & & mr . getResult ( ) . longValue ( ) ! = 7l ) ) {
MissionResult result = new MissionResult ( ) ;
result . setUuid ( mr . getUuid ( ) ) ;
Common . sendMissionInfo ( mission , new NMSClientTask4Cancel ( Common . getNodeIpByUUID ( mr . getUuid ( ) ) , Constants . SSL_CLIENT_PORT , mission . getMissionId ( ) ) , mr . getUuid ( ) , 1 , roundInfo . getStartTime ( ) . getTime ( ) , roundInfo . getEndTime ( ) . getTime ( ) ) ;
}
}
}
}
}
//-- 任务结果保存
String [ ] strs = null ;
if ( mr . getMissionType ( ) ! = null & & mr . getMissionType ( ) . longValue ( ) = = 4l ) {
strs = new String [ 6 ] ;
strs [ 0 ] = mr . getResult ( ) = = null ? null : mr . getResult ( ) + " " ;
strs [ 1 ] = ( StringUtils . isEmpty ( mr . getDescription ( ) ) | | " null " . equalsIgnoreCase ( mr . getDescription ( ) ) ) ? " " : ( mr . getDescription ( ) + " \ n " ) ;
strs [ 2 ] = mr . getFileInfo ( ) ;
strs [ 3 ] = mr . getResultDetail ( ) = = null ? null : mr . getResultDetail ( ) + " " ;
strs [ 4 ] = resultsMissionId . longValue ( ) + " " ;
strs [ 5 ] = mr . getUuid ( ) + " " ;
if ( StringUtils . isNotEmpty ( strs [ 2 ] ) ) {
logger . debug ( " 准备入库(含回传文件) : " + Arrays . toString ( strs ) ) ;
}
} else {
strs = new String [ 4 ] ;
strs [ 0 ] = mr . getResult ( ) = = null ? " " : mr . getResult ( ) + " " ;
strs [ 1 ] = ( StringUtils . isEmpty ( mr . getDescription ( ) ) | | " null " . equalsIgnoreCase ( mr . getDescription ( ) ) ) ? " " : ( mr . getDescription ( ) + " \ n " ) ;
strs [ 2 ] = mr . getMissionId ( ) + " " ;
strs [ 3 ] = mr . getUuid ( ) + " " ;
}
logger . debug ( " 准备入库 : " + Arrays . toString ( strs ) ) ;
params . add ( strs ) ;
count + + ;
//2013-6-24 hyx 注释以下代码某个节点的执行结果失败不发送邮件,任务最终完成后发一封邮件即可(包括统计信息,失败和成功节点数)
//-- 任务失败结果告警
/ *
int result = mr . getResult ( ) = = null ? - 1 : mr . getResult ( ) . intValue ( ) ;
if ( result = = 1 ) { //需要告警
emailService . sendEmailForMissionBySeqId ( mr . getMissionId ( ) , missiontype , mr . getUuid ( ) , createEmailInfoForFailResult ( mr ) ) ;
}
* /
if ( count = = Constants . DB_EXECUTE_BATCH ) {
dao . dbUpdateByBatch ( sql , params ) ;
count = 0 ;
params . clear ( ) ;
}
}
if ( loopMissionIdofInsertRltList ! = null & & loopMissionIdofInsertRltList . size ( ) > 0 ) { //说明有周期任务的结果入库,就需要检测周期任务的轮次
for ( MissionStateTable missTmp : loopMissionIdofInsertRltList ) {
//-- 检查并预置轮次信息(执行撤销时不再运行)
if ( missTmp ! = null ) {
if ( missTmp . getMissionState ( ) ! = null
& & missTmp . getMissionState ( ) ! = 6l & & missTmp . getMissionState ( ) ! = 7l ) {
checkAndInitMissionCycle ( missTmp ) ; //检查预置轮次数
} else {
this . updateLoopMissionRoundInfo ( Common . getLoopMissionRoundInfoList ( ) , missTmp . getMissionId ( ) ) ; //更新指定周期任务ID的轮次信息(从数据库到缓存)
}
}
}
}
if ( count > 0 ) {
dao . dbUpdateByBatch ( sql , params ) ;
count = 0 ;
params . clear ( ) ;
}
}
logger . info ( " 任务结果批量入库保存完成 " ) ;
// } catch (Exception e) {
// logger.error("批量更新异常 \n"+"",e);
} finally {
dao . clearConn ( ) ;
}
}
public static void main ( String [ ] args ) {
CommonDao dao ;
try {
BoneCPPool . initPool ( ) ;
dao = new CommonDao ( ) ;
UpgradeService service = new UpgradeService ( dao ) ;
service . updateLoopMissionInfo ( Common . getLoopMissionInfoMap ( ) , null ) ;
Map < Long , MissionStateTable > loopMissionInfoMap = new HashMap < Long , MissionStateTable > ( ) ;
loopMissionInfoMap = Common . getLoopMissionInfoMap ( ) ;
System . out . println ( Common . getLoopMissionInfoMap ( ) . size ( ) ) ;
// service.updateLoopMissionComplete();
// service.getMissionForAgentStart(89l);
// service.checkTimeoutLoopMisssionAndAddResult();//测试:超时周期任务的检查
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
//// service.checkAndUpdateMissionComplete() ;
//// service.checkAndUpdateLoopMissionComplete();
//// service.updateCommonMissionComplete();//任务状态: 成功( 31) 、部分成功( 32) 、全部失败( 30)
//
// List<MissionResult2> mr2List = new ArrayList<MissionResult2>();
// mr2List.add(new MissionResult2(1274523l));
// mr2List.add(new MissionResult2(1274523l));
// mr2List.add(new MissionResult2(1274538l));
// mr2List.add(new MissionResult2(1274582l));
// mr2List.add(new MissionResult2(1274538l));
//
// service.updateCommonMissionStateDesc(1, mr2List);
// service.updateCommonMissionStateDesc(1, null);
// service.updateCommonMissionStateDesc(4, null);
// service.updateCommonMissionStateDesc(6, null);
// service.updateLoopMissionStateDesc(mr2List);
// service.getMissionForAgentStart(66l);
// service.updateLoopMissionInfo(Common.getLoopMissionInfoMap(), null);
// service.updateLoopMissionRoundInfo(Common.getLoopMissionRoundInfoList(), null);
// service.checkAndInitMissionCycle(Common.getLoopMissionInfoMap().get(1187604l));
}
public LoopMissionRoundInfo getRoundInfoFromCommonListByID ( Long missionId , Long curMissionId ) {
List < LoopMissionRoundInfo > roundList = Common . getLoopMissionRoundInfoList ( ) . get ( missionId ) ;
if ( roundList ! = null & & roundList . size ( ) > 0 ) {
for ( Iterator roundIte = roundList . iterator ( ) ; roundIte . hasNext ( ) ; ) {
LoopMissionRoundInfo roundInfo = ( LoopMissionRoundInfo ) roundIte . next ( ) ;
if ( curMissionId ! = null & & curMissionId . longValue ( ) = = roundInfo . getCurMissionId ( ) . longValue ( ) ) {
return roundInfo ;
}
}
}
return null ;
}
public LoopMissionRoundInfo getRoundInfoFromCommonList ( MissionResult2 mr ) {
List < LoopMissionRoundInfo > roundList = Common . getLoopMissionRoundInfoList ( ) . get ( mr . getMissionId ( ) ) ;
if ( roundList ! = null & & roundList . size ( ) > 0 ) {
// pl("mr.getMissionId()"+mr.getMissionId());
// pl("mr.getMissionType()"+mr.getMissionType());
// pl("mr.getLoopFlag()"+mr.getLoopFlag());
// pl("mr.getResult()"+mr.getResult());
// pl("mr.getUuid()"+mr.getUuid());
// pl("mr.getStartTime()"+mr.getStartTime());
// pl("mr.getEndTime()"+mr.getEndTime());
// pl("mr.getDescription()"+mr.getDescription());
// pl("mr.getFileInfo()"+mr.getFileInfo());
// pl("mr.getText()"+mr.getText());
if ( mr . getResult ( ) ! = null & & ( mr . getResult ( ) = = 6 | | mr . getResult ( ) = = 7 ) ) {
return roundList . get ( roundList . size ( ) - 1 ) ;
} else {
for ( Iterator roundIte = roundList . iterator ( ) ; roundIte . hasNext ( ) ; ) {
LoopMissionRoundInfo roundInfo = ( LoopMissionRoundInfo ) roundIte . next ( ) ;
if ( mr . getStartTime ( ) ! = null & & roundInfo . getStartTime ( ) . getTime ( ) < = mr . getStartTime ( ) & & roundInfo . getEndTime ( ) . getTime ( ) > mr . getStartTime ( ) ) {
return roundInfo ;
}
}
}
}
return null ;
}
public LoopMissionRoundInfo getRoundInfoFromDBByID ( Long curMissionId ) {
LoopMissionRoundInfo roundInfo = null ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select lmst.cur_mission_id, " ) ;
searchSQL . append ( " lmst.mission_id, " ) ;
searchSQL . append ( " lmst.mission_state, " ) ;
searchSQL . append ( " to_char(lmst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(lmst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time " ) ;
searchSQL . append ( " from loopmission_state_table lmst " ) ;
searchSQL . append ( " where 1=1 " ) ;
searchSQL . append ( " and lmst.cur_mission_id = ? " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " cur_mission_id " ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
String [ ] params = new String [ ] { curMissionId . longValue ( ) + " " } ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields , params ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
roundInfo = new LoopMissionRoundInfo ( ) ;
roundInfo . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
roundInfo . setCurMissionId ( StringUtils . isEmpty ( maps . get ( " cur_mission_id " ) ) ? null : Long . parseLong ( maps . get ( " cur_mission_id " ) ) ) ;
roundInfo . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
roundInfo . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
roundInfo . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return roundInfo ;
}
public LoopMissionRoundInfo getRoundInfoFromDB ( MissionResult2 mr ) {
LoopMissionRoundInfo roundInfo = null ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select lmst.cur_mission_id, " ) ;
searchSQL . append ( " lmst.mission_id, " ) ;
searchSQL . append ( " lmst.mission_state, " ) ;
searchSQL . append ( " to_char(lmst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(lmst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time " ) ;
searchSQL . append ( " from loopmission_state_table lmst " ) ;
searchSQL . append ( " where lmst.mission_id=? " ) ;
searchSQL . append ( " and lmst.start_time<=to_date(?,' " + Constants . DB_DATE_FORMAT + " ') " ) ;
// searchSQL.append("and lmst.end_time>=to_date(?,'"+Constants.DB_DATE_FORMAT+"') ");
/ * *
* 去掉sql语句中的等号的原因 :
* NC根据整个任务的开始和结束时间执行时 , 有可能会比DC多一个周期 ( 最后一个周期不满设定的间隔时间 ) , 因为DC将最后一个不满间隔的周期抛弃了 , 而NC却执行了 ,
* 所以此时如果NC的最后一个周期结果被收集过来 , 首先判断缓存中是否有此轮次 ( NC . startTime > = 轮次 . startTime & & NC . startTime < 轮次 . endTime ) ,
* 结果没有 , 就会通过此sql从数据库中查找 , 但是此时的 NC . startTime和轮次 . endTime比较时就加了等号 , 且比较的是日期格式的 ( 只比到了秒 ) ( 如果比较的是long格式 , NC . startTime肯定会大于最后一个周期的endTime , 可能不会出现等于的情况 ) ,
* 所以NC最后一个周期的结果就入到了上一个周期里
* /
searchSQL . append ( " and lmst.end_time>to_date(?,' " + Constants . DB_DATE_FORMAT + " ') " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " cur_mission_id " ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
// pl(mr.getMissionId());
// pl(mr.getUuid());
// pl(mr.getResult());
// pl(mr.getLoopFlag());
// pl(mr.getStartTime());
// pl(mr.getEndTime());
// pl(mr.getFileInfo());
// pl(mr.getDescription());
try {
logger . info ( " getRoundInfoFromDB方法: mr.getStartTime()= " + mr . getStartTime ( ) ) ;
String startTime = new SimpleDateFormat ( Constants . COMMON_DATE_FORMAT ) . format ( mr . getStartTime ( ) ) ;
String [ ] params = new String [ ] { mr . getMissionId ( ) + " " , startTime , startTime } ;
ArrayList < Map < String , String > > rs = null ;
rs = dao . dbSelect ( searchSQL . toString ( ) , fields , params ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
roundInfo = new LoopMissionRoundInfo ( ) ;
roundInfo . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
roundInfo . setCurMissionId ( StringUtils . isEmpty ( maps . get ( " cur_mission_id " ) ) ? null : Long . parseLong ( maps . get ( " cur_mission_id " ) ) ) ;
roundInfo . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
roundInfo . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
roundInfo . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
}
}
} catch ( Exception e ) {
logger . error ( " Get the result corresponding to wheel information abnormal task type from DB: " + mr = = null ? " " : mr . getMissionType ( ) , e ) ;
} finally {
dao . clearConn ( ) ;
}
return roundInfo ;
}
/ * *
* 根据MissionID 更新指定的 周期任务信息
* @time Feb 10 , 2012 - 2 : 23 : 35 PM
* @param missionInfoMap
* @param missionId
* @return
* /
public Map < Long , MissionStateTable > updateLoopMissionInfo ( Map < Long , MissionStateTable > missionInfoMap , Long missionId ) {
//-- 查询可执行的任务
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_id, " ) ;
searchSQL . append ( " mst.mission_type, " ) ;
searchSQL . append ( " mst.mission_state, " ) ;
searchSQL . append ( " mst.system_id, " ) ;
searchSQL . append ( " mst.group_id, " ) ;
searchSQL . append ( " mpt4.node_groups_id, " ) ;
searchSQL . append ( " mpt4.node_ips_id, " ) ; //2015-11-23 hyx 增加任务的节点信息( 由于之前只查询了节点组的信息, 所以在结果入库的时候, 以缓存中的周期任务信息的节点组和节点作为参数调用initLoopMissionResults2方法, 导致将节点组内所有的节点都进行了初始化( 如果新建任务的时候只选择了某些节点, 此处就出现问题了) , 而其他地方( 如任务新建的时候) 调用initLoopMissionResults2的时候, 是直接已参数表的节点和节点为参数, 所以不会出现问题)
searchSQL . append ( " to_char(mst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(mst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSQL . append ( " mst.is_loop, " ) ;
searchSQL . append ( " mst.loop_delay " ) ;
searchSQL . append ( " from mission_state_table mst " ) ;
searchSQL . append ( " left join mission_parameter_table4 mpt4 on mst.mission_id = mpt4.mission_id " ) ;
searchSQL . append ( " where mst.end_time>sysdate " ) ;
searchSQL . append ( " and mst.mission_state in (1,2,5,6) " ) ;
searchSQL . append ( " and mst.is_loop = 1 " ) ;
if ( missionId ! = null & & missionId . longValue ( ) ! = 0 ) {
searchSQL . append ( " and mst.mission_id = ' " + missionId . longValue ( ) + " ' " ) ;
}
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " system_id " ) ;
fields . add ( " group_id " ) ;
fields . add ( " node_groups_id " ) ;
fields . add ( " node_ips_id " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
ArrayList < Map < String , String > > rs = null ;
ArrayList < MissionStateTable > mstList = new ArrayList < MissionStateTable > ( ) ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionStateTable mission = new MissionStateTable ( ) ;
mission . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
mission . setMissionType ( StringUtils . isEmpty ( maps . get ( " mission_type " ) ) ? null : Long . parseLong ( maps . get ( " mission_type " ) ) ) ;
mission . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
mission . setSystemId ( StringUtils . isEmpty ( maps . get ( " system_id " ) ) ? null : Long . parseLong ( maps . get ( " system_id " ) ) ) ;
mission . setGroupId ( StringUtils . isEmpty ( maps . get ( " group_id " ) ) ? null : Long . parseLong ( maps . get ( " group_id " ) ) ) ;
mission . setNodeGroupsId ( StringUtils . isEmpty ( maps . get ( " node_groups_id " ) ) ? null : maps . get ( " node_groups_id " ) ) ;
mission . setNodeIpsId ( StringUtils . isEmpty ( maps . get ( " node_ips_id " ) ) ? null : maps . get ( " node_ips_id " ) ) ;
mission . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
mission . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
mission . setLoopFlag ( StringUtils . isEmpty ( maps . get ( " is_loop " ) ) ? null : Long . parseLong ( maps . get ( " is_loop " ) ) ) ;
mission . setLoopDelay ( StringUtils . isEmpty ( maps . get ( " loop_delay " ) ) ? null : Long . parseLong ( maps . get ( " loop_delay " ) ) ) ;
missionInfoMap . put ( mission . getMissionId ( ) , mission ) ;
}
}
return missionInfoMap ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return missionInfoMap ;
}
//根据curMissionId查找主任务信息
public MissionStateTable getMissionInfoByCurMissionId ( Long curMissionId ) {
MissionStateTable mission = null ;
if ( curMissionId ! = null ) {
//-- 查询可执行的任务
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select mst.mission_id, " ) ;
searchSQL . append ( " mst.mission_type, " ) ;
searchSQL . append ( " mst.mission_state, " ) ;
searchSQL . append ( " mst.system_id, " ) ;
searchSQL . append ( " mst.group_id, " ) ;
searchSQL . append ( " mpt4.node_groups_id, " ) ;
searchSQL . append ( " to_char(mst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(mst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time, " ) ;
searchSQL . append ( " mst.is_loop, " ) ;
searchSQL . append ( " mst.loop_delay " ) ;
searchSQL . append ( " from mission_state_table mst " ) ;
searchSQL . append ( " left join mission_parameter_table4 mpt4 on mst.mission_id = mpt4.mission_id " ) ;
searchSQL . append ( " left join loopmission_state_table lst on lst.mission_id = mst.mission_id " ) ;
searchSQL . append ( " where mst.end_time>sysdate " ) ;
searchSQL . append ( " and mst.mission_state in (1,2,5,6) " ) ;
searchSQL . append ( " and mst.is_loop = 1 " ) ;
searchSQL . append ( " and lst.cur_mission_id = " + curMissionId . longValue ( ) ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_type " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " system_id " ) ;
fields . add ( " group_id " ) ;
fields . add ( " node_groups_id " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
fields . add ( " is_loop " ) ;
fields . add ( " loop_delay " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
mission = new MissionStateTable ( ) ;
Map < String , String > maps = rs . get ( 0 ) ;
mission . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
mission . setMissionType ( StringUtils . isEmpty ( maps . get ( " mission_type " ) ) ? null : Long . parseLong ( maps . get ( " mission_type " ) ) ) ;
mission . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
mission . setSystemId ( StringUtils . isEmpty ( maps . get ( " system_id " ) ) ? null : Long . parseLong ( maps . get ( " system_id " ) ) ) ;
mission . setGroupId ( StringUtils . isEmpty ( maps . get ( " group_id " ) ) ? null : Long . parseLong ( maps . get ( " group_id " ) ) ) ;
mission . setNodeGroupsId ( StringUtils . isEmpty ( maps . get ( " node_groups_id " ) ) ? null : maps . get ( " node_groups_id " ) ) ;
mission . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
mission . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
mission . setLoopFlag ( StringUtils . isEmpty ( maps . get ( " is_loop " ) ) ? null : Long . parseLong ( maps . get ( " is_loop " ) ) ) ;
mission . setLoopDelay ( StringUtils . isEmpty ( maps . get ( " loop_delay " ) ) ? null : Long . parseLong ( maps . get ( " loop_delay " ) ) ) ;
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
return mission ;
}
/ * *
* 根据MissionID 更新指定的周期任务的轮次List 到 集合Map < Long , List < LoopMissionRoundInfo > > loopMissionRoundMap 中
* @time Feb 10 , 2012 - 2 : 23 : 58 PM
* @param missionInfoMap
* @param missionId
* @return
* /
public void updateLoopMissionRoundInfo ( Map < Long , List < LoopMissionRoundInfo > > loopMissionRoundMap , Long missionId ) {
List < Long > mIdsList = new LinkedList < Long > ( ) ;
if ( missionId ! = null ) {
//将missionId 加入周期任务队列已查询 周期数据
mIdsList . add ( missionId ) ;
} else {
//missionId为空时 进行非指定查询
String midsSql = " select mst.mission_id from mission_state_table mst where mst.is_loop = 1 and mst.mission_state in(1,2,5,6) and mst.end_time > to_date(' " + format . format ( new Date ( ) ) + " ','yyyy-MM-dd HH24:mi:ss') " ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
try {
//将missionId们存入周期任务队列
ArrayList < Map < String , String > > rs = dao . dbSelect ( midsSql , fields ) ;
if ( rs ! = null ) {
for ( Iterator midsIte = rs . iterator ( ) ; midsIte . hasNext ( ) ; ) {
Map < String , String > midMap = ( Map < String , String > ) midsIte . next ( ) ;
mIdsList . add ( StringUtils . isEmpty ( midMap . get ( " mission_id " ) ) ? 0 : Long . parseLong ( midMap . get ( " mission_id " ) ) ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
}
}
//终止无效操作
if ( mIdsList . size ( ) = = 0 ) {
return ;
}
//循环查询周期数据
for ( Iterator midsIte = mIdsList . iterator ( ) ; midsIte . hasNext ( ) ; ) {
Long mid = ( Long ) midsIte . next ( ) ;
//-- 跳过无效操作
if ( mid . longValue ( ) = = 0 ) {
continue ;
}
//-- 查询可执行的任务 将数据存入缓存集合
StringBuffer searchSQL = new StringBuffer ( ) ;
if ( Constants . IS_MYSQL ) {
searchSQL . append ( " select * from( " ) ;
searchSQL . append ( " select lmst.cur_mission_id, " ) ;
searchSQL . append ( " lmst.mission_id, " ) ;
searchSQL . append ( " lmst.mission_state, " ) ;
searchSQL . append ( " to_char(lmst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(lmst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time " ) ;
searchSQL . append ( " from loopmission_state_table lmst " ) ;
searchSQL . append ( " left join mission_state_table mst on mst.mission_id = lmst.mission_id " ) ;
searchSQL . append ( " where 1=1 " ) ;
// searchSQL.append("and rownum <=20 ");
searchSQL . append ( " and mst.mission_id = ? " ) ;
searchSQL . append ( " order by lmst.cur_mission_id desc " ) ;
searchSQL . append ( " limit 20 " ) ;
searchSQL . append ( " ) ttt order by cur_mission_id asc " ) ;
} else {
searchSQL . append ( " select * from( " ) ;
searchSQL . append ( " select lmst.cur_mission_id, " ) ;
searchSQL . append ( " lmst.mission_id, " ) ;
searchSQL . append ( " lmst.mission_state, " ) ;
searchSQL . append ( " to_char(lmst.start_time,' " + Constants . DB_DATE_FORMAT + " ') start_time, " ) ;
searchSQL . append ( " to_char(lmst.end_time,' " + Constants . DB_DATE_FORMAT + " ') end_time " ) ;
searchSQL . append ( " from loopmission_state_table lmst " ) ;
searchSQL . append ( " left join mission_state_table mst on mst.mission_id = lmst.mission_id " ) ;
searchSQL . append ( " where 1=1 " ) ;
searchSQL . append ( " and rownum <=20 " ) ;
searchSQL . append ( " and mst.mission_id = ? " ) ;
searchSQL . append ( " order by lmst.cur_mission_id desc " ) ;
searchSQL . append ( " ) ttt order by cur_mission_id asc " ) ;
}
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " cur_mission_id " ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_state " ) ;
fields . add ( " start_time " ) ;
fields . add ( " end_time " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
rs = dao . dbSelect ( searchSQL . toString ( ) , fields , new String [ ] { mid . longValue ( ) + " " } ) ;
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
LoopMissionRoundInfo roundInfo = new LoopMissionRoundInfo ( ) ;
roundInfo . setMissionId ( StringUtils . isEmpty ( maps . get ( " mission_id " ) ) ? null : Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
roundInfo . setCurMissionId ( StringUtils . isEmpty ( maps . get ( " cur_mission_id " ) ) ? null : Long . parseLong ( maps . get ( " cur_mission_id " ) ) ) ;
roundInfo . setMissionState ( StringUtils . isEmpty ( maps . get ( " mission_state " ) ) ? null : Long . parseLong ( maps . get ( " mission_state " ) ) ) ;
roundInfo . setStartTime ( StringUtils . isEmpty ( maps . get ( " start_time " ) ) ? null : format . parse ( maps . get ( " start_time " ) ) ) ;
roundInfo . setEndTime ( StringUtils . isEmpty ( maps . get ( " end_time " ) ) ? null : format . parse ( maps . get ( " end_time " ) ) ) ;
if ( loopMissionRoundMap . get ( roundInfo . getMissionId ( ) ) = = null ) {
List < LoopMissionRoundInfo > list = new LinkedList < LoopMissionRoundInfo > ( ) ;
loopMissionRoundMap . put ( roundInfo . getMissionId ( ) , list ) ;
}
loopMissionRoundMap . get ( roundInfo . getMissionId ( ) ) . add ( roundInfo ) ;
if ( loopMissionRoundMap . get ( roundInfo . getMissionId ( ) ) . size ( ) > 20 ) {
loopMissionRoundMap . get ( roundInfo . getMissionId ( ) ) . remove ( 0 ) ;
}
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
}
public String createEmailContextForMission ( Long missionId ) {
StringBuffer context = new StringBuffer ( ) ;
//通过missionID 获取任务信息 名称 创建日期等
String selectSql = " select mst.mission_name,to_char(mst.create_time,' " + Constants . DB_DATE_FORMAT + " ') create_time,mst.mission_state from mission_state_table mst where mst.mission_id = ' " + missionId + " ' " ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_name " ) ;
fields . add ( " create_time " ) ;
fields . add ( " mission_state " ) ;
try {
ArrayList < Map < String , String > > mapsList = this . dao . dbSelect ( selectSql , fields ) ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
Map < String , String > maps = mapsList . get ( 0 ) ;
// String state = "已创建";
// String state = "Created";
String state = " i18n_server.UpgradeService.created_n81i " ;
if ( " 2 " . equals ( maps . get ( " mission_state " ) ) ) {
// state = "正在执行";
// state = "Executing";
state = " i18n_server.UpgradeService.exec_n81i " ;
} else if ( " 3 " . equals ( maps . get ( " mission_state " ) ) ) {
// state = "已完成";
// state = "Completed";
state = " i18n_server.UpgradeService.finish_n81i " ;
}
// context.append("任务名称:"+maps.get("mission_name")+"\n");
// context.append("Task Name: "+maps.get("mission_name")+"\n");
context . append ( " i18n_server.UpgradeService.missionName_n81i: " + maps . get ( " mission_name " ) + " \ n " ) ;
// context.append("创建时间:"+maps.get("create_time")+"\n");
// context.append("Created Time: "+maps.get("create_time")+"\n");
context . append ( " i18n_server.UpgradeService.createTime_n81i: " + maps . get ( " create_time " ) + " \ n " ) ;
// context.append("任务状态:"+state);
// context.append("Task Status: "+state);
context . append ( " i18n_server.UpgradeService.missionState_n81i: " + state ) ;
}
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} finally {
dao . clearConn ( ) ;
}
return context . toString ( ) ;
}
private EmailInfo createEmailInfoForFailResult ( MissionResult2 mr ) {
StringBuffer context = new StringBuffer ( ) ;
String ip = Common . getNodeIpByUUID ( mr . getUuid ( ) ) ;
EmailInfo emailInfo = new EmailInfo ( ) ;
emailInfo . setActionIp ( ip ) ;
emailInfo . setActionType ( EmailTypeConstants . TYPE_TASK_NODE_RESULT_ERROR ) ;
emailInfo . setSendFlag ( EmailTypeConstants . FLAG_SEND_ALLREADY ) ;
emailInfo . setContent ( mr . getDescription ( ) ) ;
emailInfo . setActionDate ( format . format ( new Date ( mr . getStartTime ( ) = = null ? System . currentTimeMillis ( ) : mr . getStartTime ( ) ) ) ) ;
emailInfo . setSendLevel ( EmailTypeConstants . URGENT_LATER ) ;
//通过missionID 获取任务信息 名称 创建日期等
String selectSql = " select mst.mission_name,to_char(mst.create_time,' " + Constants . DB_DATE_FORMAT + " ') create_time from mission_state_table mst where mst.mission_id = ' " + mr . getMissionId ( ) + " ' " ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_name " ) ;
// fields.add("create_time");
try {
ArrayList < Map < String , String > > mapsList = this . dao . dbSelect ( selectSql , fields ) ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
Map < String , String > maps = mapsList . get ( 0 ) ;
emailInfo . setActionDesc ( maps . get ( " mission_name " ) ) ;
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return emailInfo ;
}
/ * private String createEmailContextForFailResult ( MissionResult2 mr ) {
StringBuffer context = new StringBuffer ( ) ;
String ip = Common . getNodeIpByUUID ( mr . getUuid ( ) ) ;
//通过missionID 获取任务信息 名称 创建日期等
String selectSql = " select mst.mission_name,to_char(mst.create_time,' " + Constants . DB_DATE_FORMAT + " ') create_time from mission_state_table mst where mst.mission_id = ' " + mr . getMissionId ( ) + " ' " ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_name " ) ;
fields . add ( " create_time " ) ;
try {
ArrayList < Map < String , String > > mapsList = this . dao . dbSelect ( selectSql , fields ) ;
if ( mapsList ! = null & & mapsList . size ( ) > 0 ) {
Map < String , String > maps = mapsList . get ( 0 ) ;
maps . get ( " " ) ;
context . append ( " 任务名称: " + maps . get ( " mission_name " ) + " \ n " ) ;
context . append ( " 创建时间: " + maps . get ( " create_time " ) + " \ n " ) ;
context . append ( " 结果描述: " + ip + " " + mr . getDescription ( ) ) ;
}
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} finally {
dao . clearConn ( ) ;
}
return context . toString ( ) ;
} * /
/ * *
* 变更任务状态
* @time Jan 11 , 2012 - 1 : 39 : 27 PM
* @param missionId
* @param missionState
* /
public void updateMissionState ( Long missionId , int missionState , String autoDesc ) throws Exception {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return ;
}
String [ ] params = null ;
StringBuffer sql = new StringBuffer ( " update mission_state_table mst set " ) ;
sql . append ( " mst.mission_state = ? " ) ;
pl ( autoDesc ) ;
if ( StringUtils . isEmpty ( autoDesc ) ) {
params = new String [ ] { missionState + " " , missionId . longValue ( ) + " " } ;
} else {
sql . append ( " , mst.AUTO_DESC = ? " ) ;
params = new String [ ] { missionState + " " , autoDesc , missionId . longValue ( ) + " " } ;
}
sql . append ( " where mst.mission_id =? " ) ;
try {
dao . dbUpdate ( sql . toString ( ) , params ) ;
} catch ( Exception e ) {
throw e ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 删除预置周期信息
* @time Jan 11 , 2012 - 1 : 39 : 27 PM
* @param missionId
* @param missionState
* /
public void deleteLoopMissionPreset ( Long missionId , Long curMissionId ) {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return ;
}
String sql = " delete from loopmission_state_table where mission_state=0 and mission_id = " + missionId . longValue ( ) + " and start_time>=sysdate " ;
if ( curMissionId ! = null ) {
sql = " delete from loopmission_state_table where mission_id = " + missionId . longValue ( ) + " and cur_mission_id> " + curMissionId . longValue ( ) ;
}
try {
dao . dbUpdate ( sql ) ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 变更周期任务结果的状态
* @time Jan 11 , 2012 - 1 : 39 : 27 PM
* @param missionId
* @param missionState
* /
public void updateMissionResultsResult ( long roundMissionId , int missionType , int result ) {
if ( roundMissionId = = 0 | | missionType = = 0 ) {
return ;
}
String sql = " update mission_result_table " + missionType + " mst set mst.result= " + result + " where mst.mission_id = " + roundMissionId ;
try {
dao . dbUpdate ( sql ) ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
/ * *
* 变更任务状态
* @time Jan 11 , 2012 - 1 : 39 : 27 PM
* @param missionId
* @param missionState
* /
public void updateLoopMissionState ( Long missionId , int missionState ) {
if ( missionId = = null | | missionId . longValue ( ) = = 0 ) {
return ;
}
String sql = " update loopmission_state_table mst set mst.mission_state =' " + missionState + " ' where mst.cur_mission_id = " + missionId . longValue ( ) ;
try {
dao . dbUpdate ( sql ) ;
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
public String getUpdateSQL ( int missionType ) {
// "+(mr2.getResult()==null?1:mr2.getResult())+"
// String desc = StringUtils.isEmpty(mr2.getDescription())?"":mr2.getDescription();
// "+mr2.getMissionId().longValue()+"
// "+mr2.getUuid().longValue()+"
// StringBuffer sql = new StringBuffer(" mrt set mrt.result =? ,mrt.result_desc = substr(mrt.result_desc||?,decode(sign(vsize(mrt.result_desc||?)-1024),-1,0,0,0,1,vsize(mrt.result_desc||?)+1-1024),1024) ");
StringBuffer sql = new StringBuffer ( " update mission_result_table " + missionType + " mrt set mrt.result =? ,mrt.result_desc = ? " ) ;
switch ( missionType ) {
case 1 :
// sql.insert(0, "update mission_result_table1");
break ;
case 2 :
// sql.insert(0, "update mission_result_table2");
break ;
case 3 :
// sql.insert(0, "update mission_result_table3");
break ;
case 4 :
sql . append ( " ,mrt.file_info = ? ,mrt.result_detail=? " ) ;
break ;
case 5 :
// sql.insert(0, "update mission_result_table5");
break ;
case 6 :
// sql.insert(0, "update mission_result_table6");
break ;
default :
break ;
}
sql . append ( " where mrt.mission_id =? and mrt.seq_id =? " ) ;
return sql . toString ( ) ;
}
// public void updateMissionResult2ByBatch(List<MissionResult2> mr2List) {
// List<String> updateSqlList = new ArrayList<String>();
// try {
// if(mr2List!= null && mr2List.size()>0){
// Iterator<MissionResult2> mrIte = mr2List.iterator();
// int count = 0;
// while (mrIte.hasNext()) {
// MissionResult2 mr = (MissionResult2) mrIte.next();
// String sql = getUpdateSql(mr);
// System.out.println("sql> "+sql);
// updateSqlList.add(sql);
// count++;
// if(count == Constants.DB_EXECUTE_BATCH){
// dao.dbUpdateByBatch(updateSqlList);
// count = 0;
// updateSqlList.clear();
// }
// }
// if (count > 0) {
// dao.dbUpdateByBatch(updateSqlList);
// count = 0;
// updateSqlList.clear();
// }
// }
// } catch (Exception e) {
// logger.error("批量更新异常 \n"+"",e);
// }finally{
// dao.clearConn();
// }
// }
/ * *
* 非定时任务 检查任务完成状态操作方法
* @time Nov 17 , 2011 - 4 : 47 : 55 PM
* /
/ * public void checkAndUpdateMissionComplete ( ) { //此处total是共执行的, 还是所有应执行的节点数, 再加个字段? 描述是在DC端就入库? 还是web端再统计?
StringBuffer selectSql = new StringBuffer ( ) ;
selectSql . append ( " select t.mission_id from ( " ) ;
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table1 mrt group by mrt.mission_id) union all " ) ;
// selectSql.append("(select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table2 mrt group by mrt.mission_id) union all ");
// selectSql.append("(select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table3 mrt group by mrt.mission_id) union all ");
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table4 mrt group by mrt.mission_id) union all " ) ;
// selectSql.append("(select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table5 mrt group by mrt.mission_id) union all ");
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table6 mrt group by mrt.mission_id) " ) ;
selectSql . append ( " ) t " ) ;
selectSql . append ( " left join mission_state_table mst on mst.mission_id = t.mission_id " ) ;
selectSql . append ( " where t.ok + t.fail = t.total " ) ;
selectSql . append ( " and nvl(t.mission_id,-1) <> -1 " ) ;
selectSql . append ( " and mst.is_loop = 0 " ) ;
selectSql . append ( " and mst.mission_state <3 " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
try {
// StringBuffer missionIds = new StringBuffer();
List < Map < String , String > > mapList = dao . dbSelect ( selectSql . toString ( ) , fields ) ;
if ( mapList ! = null & & mapList . size ( ) > 0 ) { //
for ( Map < String , String > map : mapList ) {
// missionIds.append(","+map.get("mission_id"));
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
// createEmailContextForMission(Long.parseLong(map.get("mission_id")));
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 3 where mst.mission_id = ? " , map . get ( " mission_id " ) ) ;
}
}
// missionIds = missionIds.deleteCharAt(0);
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
} * /
/ * *
* 非周期任务 : 录入任务结果后 , 若任务已完成 , 则更新任务状态为成功 、 部分成功 、 全部失败中的一个 ( 原来只有一个完成状态 , 做此修改便于更清晰的描述任务完成的状态 )
* 完成 ( 3 ) : t . ok + t . fail = t . total
* 成功 ( 31 ) : t . ok + t . fail = t . total and t . ok = t . total
* 部分成功 ( 32 ) : t . ok + t . fail = t . total and t . ok > 0 and t . fail > 0
* 全部失败 ( 30 ) : t . ok + t . fail = t . total and t . fail = t . total
* @time 2013 - 1 - 28 9 : 30 : 55 AM
* @author hyx
* /
public void updateCommonMissionComplete ( ) { //此处total是共执行的, 还是所有应执行的节点数, 再加个字段? 描述是在DC端就入库? 还是web端再统计?
StringBuffer selectSql = new StringBuffer ( ) ;
selectSql . append ( " select t.mission_id,t.ok,t.fail,t.total from ( " ) ;
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table1 mrt group by mrt.mission_id) union all " ) ;
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table4 mrt group by mrt.mission_id) union all " ) ;
selectSql . append ( " (select mrt.mission_id,sum(decode(mrt.result,0,1,0) ) ok,sum(decode(mrt.result,1,1,-1,1,0) ) fail,count(mrt.seq_id) total from mission_result_table6 mrt group by mrt.mission_id) " ) ;
selectSql . append ( " ) t " ) ;
selectSql . append ( " left join mission_state_table mst on mst.mission_id = t.mission_id " ) ;
selectSql . append ( " where t.ok + t.fail = t.total " ) ;
selectSql . append ( " and nvl(t.mission_id,-1) <> -1 " ) ; //不取任务id为null的?
selectSql . append ( " and mst.is_loop = 0 " ) ; //非周期任务
selectSql . append ( " and mst.mission_state in(1,2) " ) ; //如果之前已经更新为完成(=3) 的任务, 不再更新, 只更新一次( 非周期任务的状态: 1创建,2执行中,4未能执行( 未能执行的不能更新为完成) )
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " ok " ) ;
fields . add ( " fail " ) ;
fields . add ( " total " ) ;
try {
List < Map < String , String > > mapList = dao . dbSelect ( selectSql . toString ( ) , fields ) ;
if ( mapList ! = null & & mapList . size ( ) > 0 ) { //
EmailService emailService = new EmailService ( dao ) ;
for ( Map < String , String > map : mapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
Long ok = StringUtils . isEmpty ( map . get ( " ok " ) ) ? null : Long . parseLong ( map . get ( " ok " ) ) ;
Long fail = StringUtils . isEmpty ( map . get ( " fail " ) ) ? null : Long . parseLong ( map . get ( " fail " ) ) ;
Long total = StringUtils . isEmpty ( map . get ( " total " ) ) ? null : Long . parseLong ( map . get ( " total " ) ) ;
//完成的任务才需要更新状态, 但是对于新录入的任务, 我会更改其mission_state_table里的mission_state_desc
if ( ok ! = null & & ok . equals ( total ) ) { //成功
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 30 ,AUTO_DESC=? where mst.mission_id = ?",format.format(System.currentTimeMillis())+" 任务执行完成:共"+total+"个执行节点,成功"+ok+"个,失败"+fail+"个",map.get("mission_id"));
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 30 ,AUTO_DESC=? where mst.mission_id = ? " , format . format ( System . currentTimeMillis ( ) ) + " i18n_sserver.UpgradeService.sql.complate_n81i " + total + " i18n_sserver.UpgradeService.sql.executeNode_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail , map . get ( " mission_id " ) ) ;
} else if ( fail ! = null & & fail . equals ( total ) ) { //全部失败
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 31 ,AUTO_DESC=? where mst.mission_id = ?",format.format(System.currentTimeMillis())+" 任务执行完成:共"+total+"个执行节点,成功"+ok+"个,失败"+fail+"个",map.get("mission_id"));
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 31 ,AUTO_DESC=? where mst.mission_id = ? " , format . format ( System . currentTimeMillis ( ) ) + " i18n_sserver.UpgradeService.sql.complate_n81i " + total + " i18n_sserver.UpgradeService.sql.executeNode_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail , map . get ( " mission_id " ) ) ;
} else if ( fail ! = null & & fail . longValue ( ) > 0 & & ok ! = null & & ok . longValue ( ) > 0 ) { //部分成功
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 32 ,AUTO_DESC=? where mst.mission_id = ?",format.format(System.currentTimeMillis())+" 任务执行完成:共"+total+"个执行节点,成功"+ok+"个,失败"+fail+"个",map.get("mission_id"));
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 32 ,AUTO_DESC=? where mst.mission_id = ? " , format . format ( System . currentTimeMillis ( ) ) + " i18n_sserver.UpgradeService.sql.complate_n81i " + total + " i18n_sserver.UpgradeService.sql.executeNode_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail , map . get ( " mission_id " ) ) ;
}
// 发送邮件
// emailService.sendEmailForMission(Long.parseLong(map.get("mission_id")), "任务执行通知", "任务执行结束:共"+total+"个执行节点,成功"+ok+"个,失败"+fail+"个");
// emailService.sendEmailForMission(Long.parseLong(map.get("mission_id")), "Task execution notification", "End of task execution:A total of"+total+"execution nodes,successful"+ok+"failed"+fail);
emailService . sendEmailForMission ( Long . parseLong ( map . get ( " mission_id " ) ) , " i18n_server.UpgradeService.missionExec_n81i " , " i18n_server.UpgradeService.missionEnd_n81i:i18n_server.UpgradeService.sql.total_n81i " + total + " i18n_server.UpgradeService.sql.executeNode2_n81i,i18n_server.UpgradeService.sql.success_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail ) ;
}
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
//更新mission_state_table表里的mission_state_desc字段( 只对新录入结果的任务更新, 没录入任务结果的任务不需要更新)
public void updateCommonMissionStateDesc ( int missiontype , List < MissionResult2 > mr2List ) {
if ( mr2List ! = null & & mr2List . size ( ) > 0 ) {
//获得更新结果的任务id的字符串
String missionIds = getMissionIdLinkStr ( mr2List ) ;
if ( ! " " . equals ( missionIds ) ) {
updateCommonMissionStateDesc ( missiontype , missionIds ) ;
}
}
}
/ * *
* 更新mission_state_table表里的mission_state_desc字段 ( 只对新录入结果的任务更新 , 没录入任务结果的任务不需要更新 )
* 根据任务id更新任务的状态 - 非周期任务
*
* /
public void updateCommonMissionStateDesc ( int missiontype , String missionIds ) {
if ( StringUtils . isNotBlank ( missionIds ) ) {
StringBuffer selectSql = new StringBuffer ( ) ;
selectSql . append ( " select t.mission_id,t.ok,t.fail,t.total " ) ;
selectSql . append ( " from ( " ) ;
selectSql . append ( " select mrt.mission_id, " ) ;
selectSql . append ( " sum(decode(mrt.result,0,1,0) ) ok, " ) ;
selectSql . append ( " sum(decode(mrt.result,1,1,-1,1,0) ) fail, " ) ;
selectSql . append ( " count(mrt.seq_id) total " ) ;
selectSql . append ( " from mission_result_table " + missiontype + " mrt " ) ;
selectSql . append ( " group by mrt.mission_id " ) ;
selectSql . append ( " ) t " ) ;
selectSql . append ( " left join mission_state_table mst on mst.mission_id = t.mission_id " ) ;
selectSql . append ( " where mst.is_loop = 0 " ) ; //非周期任务:0,周期任务: 1
selectSql . append ( " and t.mission_id is not null " ) ; //不取任务id为null的? 其实不需要, 因为非周期任务的任务id理论上不会为null?
selectSql . append ( " and mst.mission_id in( " + missionIds + " ) " ) ; //只更新 新录入了结果的任务的任务状态描述
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " ok " ) ;
fields . add ( " fail " ) ;
fields . add ( " total " ) ;
try {
List < Map < String , String > > mapList = dao . dbSelect ( selectSql . toString ( ) , fields ) ;
if ( mapList ! = null & & mapList . size ( ) > 0 ) { //
List < String > sqls = new ArrayList < String > ( ) ;
for ( Map < String , String > map : mapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
Long ok = StringUtils . isEmpty ( map . get ( " ok " ) ) ? null : Long . parseLong ( map . get ( " ok " ) ) ;
Long fail = StringUtils . isEmpty ( map . get ( " fail " ) ) ? null : Long . parseLong ( map . get ( " fail " ) ) ;
Long total = StringUtils . isEmpty ( map . get ( " total " ) ) ? null : Long . parseLong ( map . get ( " total " ) ) ;
//完成的任务才需要更新状态, 但是对于新录入的任务, 我会更改其mission_state_table里的mission_state_desc
// sqls.add("update mission_state_table mst set mst.mission_state_desc = '共"+total+"个执行节点,</br>"+(total-ok-fail)+"个未执行,</br>"+(ok+fail)+"个已执行【成功"+ok+"个,失败"+fail+"个】' where mst.mission_id = "+map.get("mission_id"));
sqls . add ( " update mission_state_table mst set mst.mission_state_desc = 'i18n_server.UpgradeService.sql.total_n81i " + total + " i18n_server.UpgradeService.sql.executeNode2_n81i, </br> " + ( total - ok - fail ) + " i18n_server.UpgradeService.sql.unexecute_n81i, </br> " + ( ok + fail ) + " i18n_server.UpgradeService.sql.execute_n81i【i18n_server.UpgradeService.sql.success_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail + " 】' where mst.mission_id = " + map . get ( " mission_id " ) ) ;
}
}
dao . dbUpdateByBatch ( sqls ) ;
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
}
private String getMissionIdLinkStr ( List < MissionResult2 > mr2List ) {
String missionIds = " " ;
for ( MissionResult2 missRlt2 : mr2List ) {
String misId = missRlt2 . getMissionId ( ) = = null ? " " : missRlt2 . getMissionId ( ) . toString ( ) ;
if ( ! " " . equals ( misId ) & & ! ( " , " + missionIds ) . contains ( " , " + misId + " , " ) ) {
missionIds = missionIds + misId + " , " ;
}
}
if ( missionIds . endsWith ( " , " ) ) {
missionIds = missionIds . substring ( 0 , missionIds . length ( ) - 1 ) ;
}
return missionIds ;
}
//更新loopmission_state_table表里的mission_state_desc字段( 只对新录入结果的任务更新, 没录入任务结果的任务不需要更新)
public void updateLoopMissionStateDesc ( List < MissionResult2 > mr2List ) {
if ( mr2List ! = null & & mr2List . size ( ) > 0 ) {
//获得更新结果的任务id的字符串
String missionIds = getMissionIdLinkStr ( mr2List ) ;
if ( ! " " . equals ( missionIds ) ) {
updateLoopMissionStateDesc ( missionIds ) ;
}
}
}
//根据任务id更新任务的状态描述-周期任务
public void updateLoopMissionStateDesc ( String missionIds ) {
if ( StringUtils . isNotBlank ( missionIds ) ) {
// StringBuffer selectSql = new StringBuffer();
// selectSql.append(" select sumT.missionId ,sumT.ok, sumT.fail, sumT.total ");
// selectSql.append(" from (");
// selectSql.append(" select row_number() over(partition by lmst.mission_id order by lmst.cur_mission_id desc) cn, ");
// selectSql.append(" lmst.cur_mission_id ,");
// selectSql.append(" lmst.mission_id missionId,mst.mission_state, ");
// selectSql.append(" t.ok, t.fail, t.total ");
// selectSql.append(" from ( ");
// selectSql.append(" select mrt.mission_id, ");
// selectSql.append(" sum(decode(mrt.result, 0, 1, 0)) ok, ");//只统计正常执行的周期任务执行情况,对于撤销的不管
// selectSql.append(" sum(decode(mrt.result, 1, 1, -1, 1, 0)) fail, ");//只统计正常执行的周期任务执行情况,对于撤销的不管
// selectSql.append(" count(mrt.seq_id) total ");
// selectSql.append(" from mission_result_table4 mrt ");
// selectSql.append(" group by mrt.mission_id ");
// selectSql.append(" ) t ");
// selectSql.append(" left join loopmission_state_table lmst on lmst.cur_mission_id = t.mission_id ");
// selectSql.append(" left join mission_state_table mst on mst.mission_id = lmst.mission_id ");
// selectSql.append(" where lmst.cur_mission_id is not null and mst.is_loop=1 and mst.mission_state =2 ");//mission_state=2表示只修改正常执行的, 对于撤销的, 不予修改
// selectSql.append(" and mst.mission_id in("+missionIds+") ");//只修改有结果录入的
// selectSql.append(" ) sumT ");//只修改有结果录入的
// selectSql.append(" where sumT.cn=1 ");//只修改有结果录入的
String selectSql = " select lmst.mission_id missionId, t.ok, t.fail, t.total \ n " +
" from (select mrt.mission_id, \ n " +
" nvl(sum(decode(mrt.result, 0, 1, 0)), 0) ok, \ n " +
" nvl(sum(decode(mrt.result, 1, 1, -1, 1, 0)), 0) fail, \ n " +
" count(mrt.seq_id) total \ n " +
" from mission_result_table4 mrt \ n " +
" group by mrt.mission_id) t \ n " +
" left join (select max(lst.cur_mission_id) cur_mission_id, lst.mission_id \ n " +
" from mission_result_table4 mrt4 \ n " +
" left join loopmission_state_table lst on mrt4.mission_id = lst.cur_mission_id \ n " +
" group by lst.mission_id) lmst \ n " +
" on lmst.cur_mission_id = t.mission_id \ n " +
" left join mission_state_table mst \ n " +
" on mst.mission_id = lmst.mission_id \ n " +
" where lmst.cur_mission_id is not null and mst.is_loop=1 " +
" and mst.mission_state =2 and mst.mission_id in ( " + missionIds + " ) " ; //mission_state=2表示只修改正常执行的, 对于撤销的, 不予修改
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " missionId " ) ;
fields . add ( " ok " ) ;
fields . add ( " fail " ) ;
fields . add ( " total " ) ;
try {
List < Map < String , String > > mapList = dao . dbSelect ( selectSql . toString ( ) , fields ) ;
if ( mapList ! = null & & mapList . size ( ) > 0 ) { //
List < String > sqls = new ArrayList < String > ( ) ;
for ( Map < String , String > map : mapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " missionId " ) ) ) {
Long ok = StringUtils . isEmpty ( map . get ( " ok " ) ) ? null : Long . parseLong ( map . get ( " ok " ) ) ;
Long fail = StringUtils . isEmpty ( map . get ( " fail " ) ) ? null : Long . parseLong ( map . get ( " fail " ) ) ;
Long total = StringUtils . isEmpty ( map . get ( " total " ) ) ? null : Long . parseLong ( map . get ( " total " ) ) ;
//完成的任务才需要更新状态, 但是对于新录入的任务, 我会更改其mission_state_table里的mission_state_desc
// sqls.add("update mission_state_table mst set mst.mission_state_desc = '最新周期共"+total+"个执行节点,</br>"+(total-ok-fail)+"个未执行,</br>"+(ok+fail)+"个已执行【成功"+ok+"个,失败"+fail+"个】' where mst.mission_id = "+map.get("missionId"));
sqls . add ( " update mission_state_table mst set mst.mission_state_desc = 'i18n_server.UpgradeService.sql.cycle_n81i " + total + " i18n_server.UpgradeService.sql.executeNode2_n81i, </br> " + ( total - ok - fail ) + " i18n_server.UpgradeService.sql.unexecute_n81i, </br> " + ( ok + fail ) + " i18n_server.UpgradeService.sql.execute_n81i【i18n_server.UpgradeService.sql.success_n81i " + ok + " i18n_sserver.UpgradeService.sql.failed_n81i " + fail + " 】' where mst.mission_id = " + map . get ( " missionId " ) ) ;
}
}
dao . dbUpdateByBatch ( sqls ) ;
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
}
/ * *
* 周期任务 :
* 更新loopmission_state_table表 :
* 1 . 查询正常执行的单次周期任务的完成 ( 2 - > 3 ) + 撤销任务的撤销完成 ( 6 - > 7 )
* 2 . 更新表loopmission_state_table中的状态 ( 2 - > 3 , 6 - > 7 )
* 更新mission_state_table表 :
* 1 . 查询正常执行的任务周期全部完成为任务完成 ( 2 - > 3 )
* 2 . 查询撤销任务周的撤销完成为整个任务撤销完成 ( 6 - > 7 )
* 任务完成判定标准 ( 20130322 ) : 撤销任务为撤销周期完成即整个任务完成
* 正常周期任务为所有正常均完成则整个任务完成
* @time Nov 17 , 2011 - 4 : 47 : 55 PM
* @author hyx
* /
public void updateLoopMissionComplete ( ) {
//-- 周期任务 的检查SQL
//完成的(正常执行的+撤销的, 为了获得完成的任务id, 无论是正常执行完成的, 还是撤销完成的)
StringBuffer loopSQL = new StringBuffer ( ) ;
loopSQL . append ( " select lmst.cur_mission_id mission_id ,lmst.mission_state " ) ;
loopSQL . append ( " from ( " ) ;
loopSQL . append ( " select mrt.mission_id, " ) ; //0, 1, -1和6,7不会同时出现的
loopSQL . append ( " sum(case when mrt.result = 0 then 1 else 0 end) ok, " ) ; //正常执行成功的
loopSQL . append ( " sum(case when mrt.result in (1,-1) then 1 else 0 end) fail, " ) ; //正常执行失败的
loopSQL . append ( " sum(case when mrt.result = 7 then 1 else 0 end) cxOk, " ) ; //撤销成功的
loopSQL . append ( " sum(case when mrt.result = 6 then 1 else 0 end) cxFail, " ) ; //撤销失败的
loopSQL . append ( " count(mrt.seq_id) total " ) ; //总数
loopSQL . append ( " from mission_result_table4 mrt " ) ;
loopSQL . append ( " group by mrt.mission_id " ) ;
loopSQL . append ( " ) t " ) ;
loopSQL . append ( " left join loopmission_state_table lmst on lmst.cur_mission_id = t.mission_id " ) ;
loopSQL . append ( " where lmst.cur_mission_id is not null " ) ;
loopSQL . append ( " and (t.ok + t.fail = t.total or t.cxOk+t.cxFail=t.total ) " ) ;
loopSQL . append ( " and lmst.mission_state not in (3,7) " ) ; //3:周期任务的单次任务完成, 7: 周期任务的单次任务完成撤销
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_state " ) ;
try {
List < Map < String , String > > mapList = dao . dbSelect ( loopSQL . toString ( ) , fields ) ;
//- 变更周期任务信息状态 loopmission_state_table
if ( mapList ! = null & & mapList . size ( ) > 0 ) {
StringBuffer missionIds = new StringBuffer ( " 0 " ) ; //正常周期任务结果入库完成轮次IDS
StringBuffer cancelMissionIds = new StringBuffer ( " 0 " ) ; //撤销周期任务结果入库完成轮次IDS
for ( Map < String , String > map : mapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " mission_state " ) ) & & map . get ( " mission_state " ) . equals ( " 6 " ) ) { //撤销周期
cancelMissionIds . append ( " , " + map . get ( " mission_id " ) ) ;
} else { //非撤销周期
missionIds . append ( " , " + map . get ( " mission_id " ) ) ;
}
}
//存在撤销周期的轮次任务
if ( cancelMissionIds . length ( ) > 1 ) {
//将该周期轮次状态置为撤销完成,将该任务状态置为撤销完成
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = 7 where mst.mission_state = 6 and mst.cur_mission_id in ( " + cancelMissionIds . toString ( ) + " ) " ) ;
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7 , mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and mst.mission_id in ( select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id in("+cancelMissionIds.toString()+")) ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 7 , mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i' where mst.mission_state = 6 and mst.mission_id in ( select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id in( " + cancelMissionIds . toString ( ) + " )) " ) ;
}
//存在正常周期的轮次任务
if ( missionIds . length ( ) > 1 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = 3 where mst.mission_state = 2 and mst.cur_mission_id in ( " + missionIds . toString ( ) + " ) " ) ;
}
}
//- 变更周期任务信息状态 mission_state_table
StringBuffer missionSql = new StringBuffer ( ) ;
missionSql . append ( " select mst.mission_id,mst.mission_state " ) ;
missionSql . append ( " from ( " ) ;
missionSql . append ( " select lmst.mission_id, " ) ;
missionSql . append ( " sum(decode(lmst.mission_state, 3, 1, 7, 1, 0)) ok, " ) ; //正常执行完成的周期,撤销完成的周期
missionSql . append ( " sum(decode(lmst.mission_state, 4, 1, 0)) fail, " ) ; //未能执行的周期
missionSql . append ( " count(lmst.cur_mission_id) total " ) ;
missionSql . append ( " from loopmission_state_table lmst " ) ;
missionSql . append ( " group by lmst.mission_id " ) ;
missionSql . append ( " ) t " ) ;
missionSql . append ( " left join mission_state_table mst on mst.mission_id = t.mission_id " ) ;
missionSql . append ( " where t.ok + t.fail = t.total " ) ;
missionSql . append ( " and nvl(mst.mission_id, -1) <> -1 " ) ;
missionSql . append ( " and mst.is_loop = 1 " ) ;
missionSql . append ( " and mst.mission_state not in (3, 7, 4) " ) ;
StringBuffer missionIds0 = new StringBuffer ( " 0 " ) ;
List < Map < String , String > > mapList0 = dao . dbSelect ( missionSql . toString ( ) , fields ) ;
//- 变更周期任务信息状态 mission_state_table
if ( mapList0 ! = null & & mapList0 . size ( ) > 0 ) {
EmailService emailService = new EmailService ( dao ) ;
for ( Map < String , String > map : mapList0 ) {
missionIds0 . append ( " , " + map . get ( " mission_id " ) ) ;
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
// 发送邮件
// emailService.sendEmailForMission(Long.parseLong(map.get("mission_id")), "任务执行通知", "任务执行结束");
emailService . sendEmailForMission ( Long . parseLong ( map . get ( " mission_id " ) ) , " i18n_server.UpgradeService.missionExec_n81i " , " i18n_server.UpgradeService.missionEnd_n81i " ) ;
}
}
//将撤销任务或撤销超时任务置为撤销完成状态
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and (mst.mission_id in ("+missionIds0.toString()+") or mst.end_time <= sysdate)");
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and mst.mission_id in ("+missionIds0.toString()+") ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 7,mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i' where mst.mission_state = 6 and mst.mission_id in ( " + missionIds0 . toString ( ) + " ) " ) ;
//只针对完成的周期任务, 不包括撤销任务( 完成的状况可能是: 全部完成( mission_state为3的=total) , 部分未能执行( fail>0) )
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 3,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务执行完成' where mst.mission_state = 2 and (mst.mission_id in ("+missionIds0.toString()+") or mst.end_time <= sysdate)");
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 3,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务执行完成' where mst.mission_state = 2 and mst.mission_id in ("+missionIds0.toString()+") ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 3,mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i' where mst.mission_state = 2 and mst.mission_id in ( " + missionIds0 . toString ( ) + " ) " ) ;
//--将超时的任务检查,单独提出-checkTimeoutLoopMisssionAndAddResult()方法
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
//对于超时周期任务的清理: 周期未初始化结果: loop表的state=0 or 1, 将loop表的state修改为4未能执行
public void updateTimeoutLoopMissionState ( String timeoutMissIds ) {
if ( StringUtils . isNotBlank ( timeoutMissIds ) ) {
StringBuffer loopSQL = new StringBuffer ( ) ;
loopSQL . append ( " select lmst.mission_id,lmst.cur_mission_id , lmst.mission_state " ) ;
loopSQL . append ( " from loopmission_state_table lmst " ) ;
loopSQL . append ( " where lmst.mission_id in ( " + timeoutMissIds + " ) and lmst.mission_state in (0,1) and lmst.end_time<=to_date(' " + format . format ( new Date ( ) ) + " ','yyyy-MM-dd HH24:mi:ss') " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " cur_mission_id " ) ;
fields . add ( " mission_state " ) ;
try {
List < Map < String , String > > mapList = dao . dbSelect ( loopSQL . toString ( ) , fields ) ;
//- 变更周期任务信息状态 loopmission_state_table
if ( mapList ! = null & & mapList . size ( ) > 0 ) {
StringBuffer missionIds = new StringBuffer ( " 0 " ) ;
StringBuffer cancelMissionIds = new StringBuffer ( " 0 " ) ;
for ( Map < String , String > map : mapList ) {
if ( StringUtils . isNotEmpty ( map . get ( " mission_state " ) ) & & map . get ( " mission_state " ) . equals ( " 6 " ) ) { //撤销周期
cancelMissionIds . append ( " , " + map . get ( " cur_mission_id " ) ) ;
} else { //非撤销周期
missionIds . append ( " , " + map . get ( " cur_mission_id " ) ) ;
}
}
//存在撤销周期的轮次任务
if ( cancelMissionIds . length ( ) > 1 ) {
//将该周期轮次状态置为撤销完成,将该任务状态置为撤销完成
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = 7 where mst.mission_state = 6 and mst.cur_mission_id in ( " + cancelMissionIds . toString ( ) + " ) " ) ;
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7 , mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and mst.mission_id in ( select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id in("+cancelMissionIds.toString()+")) ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 7 , mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i' where mst.mission_state = 6 and mst.mission_id in ( select lmst.mission_id from loopmission_state_table lmst where lmst.cur_mission_id in( " + cancelMissionIds . toString ( ) + " )) " ) ;
}
//存在正常周期的轮次任务
if ( missionIds . length ( ) > 1 ) {
dao . dbUpdate ( " update loopmission_state_table mst set mst.mission_state = 4 where mst.cur_mission_id in ( " + missionIds . toString ( ) + " ) " ) ;
}
}
//- 变更周期任务信息状态 mission_state_table
StringBuffer missionSql = new StringBuffer ( ) ;
missionSql . append ( " select mst.mission_id,mst.mission_state " ) ;
missionSql . append ( " from ( " ) ;
missionSql . append ( " select lmst.mission_id, " ) ;
missionSql . append ( " sum(decode(lmst.mission_state, 3, 1, 7, 1, 0)) ok, " ) ; //正常执行完成的周期,撤销完成的周期
missionSql . append ( " sum(decode(lmst.mission_state, 4, 1, 0)) fail, " ) ; //未能执行的周期
missionSql . append ( " count(lmst.cur_mission_id) total " ) ;
missionSql . append ( " from loopmission_state_table lmst " ) ;
missionSql . append ( " group by lmst.mission_id " ) ;
missionSql . append ( " ) t " ) ;
missionSql . append ( " left join mission_state_table mst on mst.mission_id = t.mission_id " ) ;
missionSql . append ( " where t.ok + t.fail = t.total " ) ;
missionSql . append ( " and nvl(mst.mission_id, -1) <> -1 " ) ;
missionSql . append ( " and mst.is_loop = 1 " ) ;
missionSql . append ( " and mst.mission_state not in (3, 7, 4) " ) ;
ArrayList < String > missFields = new ArrayList < String > ( ) ;
missFields . add ( " mission_id " ) ;
missFields . add ( " mission_state " ) ;
StringBuffer missionIds0 = new StringBuffer ( " 0 " ) ;
List < Map < String , String > > mapList0 = dao . dbSelect ( missionSql . toString ( ) , missFields ) ;
//- 变更周期任务信息状态 mission_state_table
if ( mapList0 ! = null & & mapList0 . size ( ) > 0 ) {
EmailService emailService = new EmailService ( dao ) ;
for ( Map < String , String > map : mapList0 ) {
missionIds0 . append ( " , " + map . get ( " mission_id " ) ) ;
if ( StringUtils . isNotEmpty ( map . get ( " mission_id " ) ) ) {
// 发送邮件
// emailService.sendEmailForMission(Long.parseLong(map.get("mission_id")), "任务执行通知", "任务执行结束");
emailService . sendEmailForMission ( Long . parseLong ( map . get ( " mission_id " ) ) , " i18n_server.UpgradeService.missionExec_n81i " , " i18n_server.UpgradeService.missionExec_n81i " ) ;
}
}
//将撤销任务或撤销超时任务置为撤销完成状态
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and mst.mission_id in ("+missionIds0.toString()+") ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 7,mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i' where mst.mission_state = 6 and mst.mission_id in ( " + missionIds0 . toString ( ) + " ) " ) ;
//只针对完成的周期任务, 不包括撤销任务( 完成的状况可能是: 全部完成( mission_state为3的=total) , 部分未能执行( fail>0) )
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 3,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务执行完成' where mst.mission_state = 2 and mst.mission_id in ("+missionIds0.toString()+") ");
dao . dbUpdate ( " update mission_state_table mst set mst.mission_state = 3,mst.auto_desc=' " + format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.executed_n81i' where mst.mission_state = 2 and mst.mission_id in ( " + missionIds0 . toString ( ) + " ) " ) ;
//--将超时的任务检查,单独提出-checkTimeoutLoopMisssionAndAddResult()方法
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
}
/ * *
* 2013 - 3 - 13 hyx
* 检查周期任务中超时的任务 , 并将结果 ( state状态修改 ) 存入缓存 , 等待下一次录入结果线程执行时 , 更改任务的状态及描述
* 针对过期未完成的 【 周期 】 任务进行清理 ( 非周期任务不需要清理 , 因为没有结束时间endTime , 所以不会超时 ) :
* 1 . 会不会重复添加过期任务呢 ? - 不会 , 因为此处将结果加入缓存后 , 会先执行上面的结果录入 , 和任务状态的改变 , 再执行过期任务清理时 , 之前的过期任务的状态已修改为3或者7 , 不会被统计
* 2 . 清理时 , 将超时的任务 ( mission_state_table表中state = 2或者6的 , 且endTime小于当前时间的 ) 的结果存入缓存 ( Common . addResultToResultList )
* 3 . 对于过期的周期任务 :
* 除了修改周期结果的状态 ( 3 - > 1 ) ,
* 还需要修改loopmission_state_table表的状态 ( 2 - > 3或者6 - > 7 , 对于状态为0的不需要修改 , 因为界面不会显示 ? 更新状态时也不会统计 ) ,
* 及mission_state_table的状态 ( 2 - > 3或者6 - > 7 , 对于1的情况 , 在初始化任务时 , 已经做过超时检查了 , 初始化后任务的状态变为2了就 , 所以此处不用对1的做超时检查 ) ,
* 注 : 将过期周期任务结果存入缓存后 , 上面进行统计时 , 就会根据结果的状态 , 统计loop表的状态 , 及mission_state_table表的状态 , 所以步骤3的3个修改 , 我们只需要做第一步 , 将结果存入缓存
*
* 程序逻辑 :
* 如果获得超时的任务 : - - 所谓的超时 , 是指表mission_state_table的endTime小于当前时间
* ( 1 ) 从mission_state_table表查询 : 周期任务 ( isLoop = 1 and missType = 4 ) , state = 2或者6的 , 且endTime小于当前时间的任务ids
* ( 2 ) 根据 ( 1 ) 生成的任务ids , 查询结果表里的信息 ( 只查找result = 3或者5的 ) , 再生成MissionResult2类 ( 使result = 1 )
* ( 3 ) 将生成的MissionResult2存入缓存
* /
public void checkTimeoutLoopMisssionAndAddResult ( ) {
//第一步-- 超时周期任务 检查SQL
Date sysdateD = new Date ( ) ;
String sysdate = format . format ( sysdateD ) ; //为了统一时间, 都去DC的时间
StringBuffer missionTimeoutCheckSQL = new StringBuffer ( ) ;
missionTimeoutCheckSQL . append ( " select mst.mission_id, mst.mission_state " ) ;
missionTimeoutCheckSQL . append ( " from mission_state_table mst " ) ;
missionTimeoutCheckSQL . append ( " where mst.is_loop=1 " ) ;
missionTimeoutCheckSQL . append ( " and mst.mission_type=4 " ) ;
missionTimeoutCheckSQL . append ( " and mst.mission_state in(2,6) " ) ;
missionTimeoutCheckSQL . append ( " and mst.end_time<to_date(' " + sysdate + " ','yyyy-MM-dd HH24:mi:ss') " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " mission_state " ) ;
try {
StringBuffer timeoutMissIds = new StringBuffer ( " 0 " ) ;
List < Map < String , String > > timeoutMissMapList = dao . dbSelect ( missionTimeoutCheckSQL . toString ( ) , fields ) ;
if ( timeoutMissMapList ! = null & & timeoutMissMapList . size ( ) > 0 ) {
//第二步
for ( Map < String , String > map : timeoutMissMapList ) {
timeoutMissIds . append ( " , " + map . get ( " mission_id " ) ) ;
}
System . out . println ( timeoutMissIds . toString ( ) ) ;
//对于超时周期任务的清理:任务结果为下发中的部分
List < MissionResult2 > mrList = getAllMissRltsForLoopTask ( timeoutMissIds . toString ( ) ) ;
//第三步
for ( MissionResult2 mr : mrList ) {
// MissionResult2 result2 = new MissionResult2();
// //- 任务Id long
// result2.setMissionId(mr.getMissionId());
// //-- 任务类型 long
// result2.setMissionType(4l);
// //- UUID long
// result2.setUuid(mr.getUuid());
// //- 周期标识 long
// result2.setLoopFlag(1l);
// //- 开始执行时间 long
// result2.setStartTime(null);
// //- 结束时间 long
// result2.setEndTime(null);
// //- 配置截取文本 string
// result2.setText(null);
//- 结果状态 long
mr . setResult ( 1l ) ;
//- 结果描述 string
mr . setDescription ( MissionConstants . ERROR_RESULT_EXEC_TIMEOUT ) ;
Common . addResultToResultList ( mr ) ; //超时未执行的任务
}
//对于超时周期任务的清理: 周期未初始化结果: loop表的state=0 or 1, 将loop表的state修改为4未能执行
updateTimeoutLoopMissionState ( timeoutMissIds . toString ( ) ) ;
}
} catch ( Exception e ) {
logger . error ( " Check the timeout task in the cycle task and store the result of the timeout task into the cache exception " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
//清理指定任务id的周期任务:修改结果表和loop表时会先判断是否超时
public void clearTimeoutLoopMisssion ( Long missionId ) {
try {
if ( missionId ! = null ) {
//对于超时周期任务的清理:任务结果为下发中的部分
List < MissionResult2 > mrList = getAllMissRltsForLoopTask ( missionId . toString ( ) ) ;
//第三步
for ( MissionResult2 mr : mrList ) {
//- 结果状态 long
mr . setResult ( 1l ) ;
//- 结果描述 string
mr . setDescription ( MissionConstants . ERROR_RESULT_EXEC_TIMEOUT ) ;
Common . addResultToResultList ( mr ) ; //超时未执行的任务
}
//对于超时周期任务的清理: 周期未初始化结果: loop表的state=0 or 1, 将loop表的state修改为4未能执行
updateTimeoutLoopMissionState ( missionId . toString ( ) ) ;
}
} catch ( Exception e ) {
logger . error ( " Clear the specified cycle task and store the result of timeout task into cache exception " , e ) ;
} finally {
dao . clearConn ( ) ;
}
}
private ArrayList < MissionResult2 > getAllMissRltsForLoopTask ( String missionIds ) {
if ( StringUtils . isBlank ( missionIds ) | | " 0 " . equals ( missionIds ) ) {
return null ;
}
ArrayList < MissionResult2 > mrList = new ArrayList < MissionResult2 > ( ) ;
StringBuffer searchSQL = new StringBuffer ( ) ;
searchSQL . append ( " select lmst.mission_id, " ) ;
searchSQL . append ( " to_char(lmst.START_TIME,' " + Constants . DB_DATE_FORMAT + " ') START_TIME, " ) ;
searchSQL . append ( " to_char(lmst.END_TIME,' " + Constants . DB_DATE_FORMAT + " ') END_TIME, " ) ;
searchSQL . append ( " nt.node_ip, " ) ;
searchSQL . append ( " mrt.seq_id, " ) ;
searchSQL . append ( " nvl(mrt.result,3) result " ) ;
searchSQL . append ( " from mission_result_table4 mrt " ) ;
searchSQL . append ( " left join loopmission_state_table lmst on lmst.cur_mission_id = mrt.mission_id " ) ;
searchSQL . append ( " left join (select distinct node_ip,ipn,seq_id from node_table n) nt on nt.seq_id=mrt.seq_id " ) ;
searchSQL . append ( " where lmst.mission_id in( " + missionIds + " ) " ) ;
searchSQL . append ( " and nvl(mrt.result,3) in(3,5) " ) ;
searchSQL . append ( " and lmst.end_time<=to_date(' " + format . format ( new Date ( ) ) + " ','yyyy-MM-dd HH24:mi:ss') " ) ;
ArrayList < String > fields = new ArrayList < String > ( ) ;
fields . add ( " mission_id " ) ;
fields . add ( " START_TIME " ) ;
fields . add ( " END_TIME " ) ;
fields . add ( " node_ip " ) ;
fields . add ( " result " ) ;
fields . add ( " seq_id " ) ;
ArrayList < Map < String , String > > rs = null ;
try {
logger . debug ( searchSQL . toString ( ) ) ;
rs = dao . dbSelect ( searchSQL . toString ( ) , fields ) ;
//-- 整理到对象集合
if ( rs ! = null & & rs . size ( ) > 0 ) {
for ( Map < String , String > maps : rs ) {
MissionResult2 result = new MissionResult2 ( ) ;
result . setMissionId ( Long . parseLong ( maps . get ( " mission_id " ) ) ) ;
// result.setNodeIp(maps.get("node_ip"));
result . setUuid ( maps . get ( " seq_id " ) = = null ? null : Long . parseLong ( maps . get ( " seq_id " ) ) ) ;
result . setResult ( maps . get ( " result " ) = = null ? null : Long . parseLong ( maps . get ( " result " ) ) ) ;
result . setEndTime ( maps . get ( " END_TIME " ) = = null ? null : format . parse ( maps . get ( " END_TIME " ) ) . getTime ( ) ) ;
result . setStartTime ( maps . get ( " START_TIME " ) = = null ? null : format . parse ( maps . get ( " START_TIME " ) ) . getTime ( ) ) ;
// result.setEndTime(maps.get("result")==null ? null:Long.parseLong(maps.get("result")));
result . setMissionType ( 4l ) ;
result . setLoopFlag ( 1l ) ;
mrList . add ( result ) ;
}
}
} catch ( Exception e ) {
logger . error ( " " , e ) ;
} finally {
dao . clearConn ( ) ;
}
return mrList ;
}
/ * *
* 将周期任务的部分结果设置为空
* @time Nov 17 , 2011 - 4 : 47 : 55 PM
* /
// public void checkAndUpdateLoopMissionComplete() {
// //-- 周期任务 的检查SQL
// StringBuffer loopSQL = new StringBuffer();
//
//// SimpleDateFormat format = new SimpleDateFormat();
// loopSQL.append("select lmst.cur_mission_id mission_id from (");
// loopSQL.append("(select mrt.mission_id,sum(case when mrt.result = 0 then 1 else 0 end) ok,sum(case when mrt.result in (1,-1) then 1 else 0 end) fail,count(mrt.seq_id) total from mission_result_table4 mrt group by mrt.mission_id ) ");
// loopSQL.append("union all " +
// "(select mrt.mission_id,sum(case when mrt.result='7' then 1 else 0 end) ok,sum(case when mrt.result='0' then 1 else 0 end) fail,count(mrt.seq_id) total from mission_result_table4 mrt group by mrt.mission_id ) ");
// loopSQL.append(") t ");
// loopSQL.append("left join loopmission_state_table lmst on lmst.cur_mission_id = t.mission_id ");
// loopSQL.append("where t.ok + t.fail = t.total ");
// loopSQL.append("and nvl(t.mission_id,-1) <> -1 ");
// loopSQL.append("and lmst.mission_state not in (3,7) ");
//
// ArrayList<String> fields = new ArrayList<String>();
// fields.add("mission_id");
// try {
// StringBuffer missionIds = new StringBuffer("0");
// List<Map<String, String>> mapList = dao.dbSelect(loopSQL.toString(), fields);
// //- 变更周期任务信息状态 loopmission_state_table
// if(mapList != null && mapList.size()>0){
// for(Map<String, String> map : mapList){
// missionIds.append(","+map.get("mission_id"));
//// if(StringUtils.isNotEmpty(map.get("mission_id"))){
//// createEmailContextForMission(Long.parseLong(map.get("mission_id")));
//// }
// }
//// missionIds = missionIds.deleteCharAt(0);
// dao.dbUpdate("update loopmission_state_table mst set mst.mission_state = 3 where mst.mission_state = 2 and mst.cur_mission_id in ("+missionIds.toString()+")");
// dao.dbUpdate("update loopmission_state_table mst set mst.mission_state = 7 where mst.mission_state = 6 and mst.cur_mission_id in ("+missionIds.toString()+")");
// }
// //- 变更周期任务信息状态 mission_state_table
// if(mapList != null && mapList.size()>0){
// StringBuffer missionSql = new StringBuffer();
// missionSql.append("select mst.mission_id from (");
// missionSql.append("select lmst.mission_id,sum(decode(mrt.result,3,1,7,1,0) ) ok,sum(decode(mrt.result,4,1,0) ) fail,count(lmst.cur_mission_id) total from loopmission_state_table lmst group by lmst.mission_id ");
// missionSql.append(") t ");
// missionSql.append("left join mission_state_table mst on mst.mission_id = t.mission_id ");
// missionSql.append("where t.ok + t.fail = t.total ");
// missionSql.append("and nvl(t.mission_id,-1) <> -1 ");
// missionSql.append("and mst.is_loop = 1 ");
// missionSql.append("and lmst.mission_state not in(3,7,4) ");
//
// StringBuffer missionIds0 = new StringBuffer("0");
// List<Map<String, String>> mapList0 = dao.dbSelect(loopSQL.toString(), fields);
// //- 变更周期任务信息状态 loopmission_state_table
// if(mapList != null && mapList.size()>0){
// for(Map<String, String> map : mapList0){
// missionIds0.append(","+map.get("mission_id"));
// if(StringUtils.isNotEmpty(map.get("mission_id"))){
// createEmailContextForMission(Long.parseLong(map.get("mission_id")));
// }
// }
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 7,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务撤销完成' where mst.mission_state = 6 and mst.mission_id in ("+missionIds.toString()+") ");
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 3,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 任务执行完成' where mst.mission_state = 2 and mst.mission_id in ("+missionIds.toString()+") and mst.end_time <= sysdate");
// dao.dbUpdate("update mission_state_table mst set mst.mission_state = 4,mst.auto_desc='"+format.format(System.currentTimeMillis())+" 当前系统时间 大于 结束时间,无法执行' where mst.mission_state = 1 and mst.end_time <= sysdate");
// }
// }
// } catch (Exception e) {
// logger.error("",e);
// }finally{
// dao.clearConn();
// }
// }
/ * *
* 获取任务结果更新Sql
* @time Nov 16 , 2011 - 1 : 32 : 07 PM
* @param mr
* @return
* /
// public String getUpdateSql(MissionResult2 mr2) {
// StringBuffer sql = new StringBuffer("update mission_result_table");
// sql.append(mr2.getMissionType()+" mrt set ");
// sql.append("mrt.result ='"+(mr2.getResult()==null?1:mr2.getResult())+"' ");
// String desc = StringUtils.isEmpty(mr2.getDescription())?"":mr2.getDescription();
// sql.append(",mrt.result_desc = substr(mrt.result_desc||'?',decode(sign(vsize(mrt.result_desc||'"+desc+"')-1024),-1,0,0,0,1,vsize(mrt.result_desc||'"+desc+"')+1-1024),1024) ");
// sql.append("where mrt.mission_id ='"+mr2.getMissionId().longValue()+"' ");
// sql.append("and mrt.seq_id ='"+mr2.getUuid().longValue()+"' ");
// return sql.toString();
// }
}