diff --git a/src/com/nms/server/service/UpgradeService.java b/src/com/nms/server/service/UpgradeService.java index ab78710..810e4bd 100644 --- a/src/com/nms/server/service/UpgradeService.java +++ b/src/com/nms/server/service/UpgradeService.java @@ -23,6 +23,7 @@ import com.nms.server.bean.LoopMissionRoundInfo; import com.nms.server.bean.MissionResult; import com.nms.server.bean.MissionResult2; import com.nms.server.bean.MissionStateTable; +import com.nms.server.bean.ServerIpSegment; import com.nms.server.bean.Task1; import com.nms.server.bean.Task4; import com.nms.server.bean.Task6; @@ -90,19 +91,106 @@ public class UpgradeService extends CommonService{ try { rs = dao.dbSelect(searchSQL.toString(), fields); if(rs!=null && rs.size()>0){ + Long serverId = Common.getServerTable().getId(); + boolean missionSingle = Constants.MISSION_SINGLE.equals("1") ? true : false; + logger.info("开始加载新任务...过滤当前dc范围内的任务:" + (missionSingle ? "是" : "否")); + //获取当前dc范围 + List ipSegList = Common.getServerTable().getIpSegList(); for(Map maps : rs){ - 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); + //是否加载任务 + 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 mnFields = new ArrayList(); + mnFields.add("node_ips_id"); + mnFields.add("node_groups_id"); + ArrayList> mns = dao.dbSelect(mnSql.toString(), mnFields); + + if (mns != null && mns.size() > 0) { + for (Map 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 nodeFields = new ArrayList(); + 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> nodeMapList = dao.dbSelect(nodeSQL.toString(), nodeFields); + //----拼写uuid串,用于校验管理范围外IP + StringBuffer uuidStr = new StringBuffer("0"); + if (nodeMapList != null && nodeMapList.size() > 0) { + for(Map 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 omNodeFields = new ArrayList(); + omNodeFields.add("seq_id"); + ArrayList> 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 { + String cancelSql = "update mission_state_table set mission_state=4 where mission_id=" + maps.get("mission_id"); + dao.dbUpdate(cancelSql); + logger.info("任务节点不在dc范围内,已取消"); + } } } return mstList; @@ -902,8 +990,19 @@ public class UpgradeService extends CommonService{ } //查询任务下发节点sql-管理范围外节点 + 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(" "); + } + ArrayList ipnSegmentFields = new ArrayList(); - 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"); + 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); + ipnSegmentFields.add("start_ipn"); ipnSegmentFields.add("end_ipn"); ArrayList> omNodeMapList = dao.dbSelect(ipnSegmentSQL.toString(), ipnSegmentFields); @@ -952,7 +1051,7 @@ public class UpgradeService extends CommonService{ if(omNodeMapList!= null && omNodeMapList.size()>0){ omNode:for(Map map : omNodeMapList){ if(seqIdTmp.equals(map.get("seq_id"))){//管理范围外节点失败结果 - params.add(new String[]{curMissionId.longValue()+"",seqIdTmp,"1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE}); + //params.add(new String[]{curMissionId.longValue()+"",seqIdTmp,"1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE}); continue node; } }