2018-11-01 16:18:11 +08:00
package com.nms.interceptor ;
import java.text.SimpleDateFormat ;
import java.util.ArrayList ;
import java.util.HashSet ;
import java.util.List ;
import java.util.Set ;
2018-11-05 16:18:43 +08:00
2018-11-01 16:18:11 +08:00
import org.apache.log4j.Logger ;
import com.alibaba.fastjson.JSON ;
import com.jfinal.aop.Interceptor ;
import com.jfinal.aop.Invocation ;
import com.jfinal.plugin.activerecord.Db ;
import com.jfinal.plugin.activerecord.Record ;
2018-11-02 09:46:35 +08:00
import com.nms.main.SyncData ;
2018-11-01 16:18:11 +08:00
import com.nms.model.SyncDbInfo ;
import com.nms.thread.SyncSlaveToMasterThread ;
public class SyncMissionResultStatisticalInterceptor implements Interceptor {
private Logger logger = Logger . getLogger ( this . getClass ( ) ) ;
private final SimpleDateFormat format = new SimpleDateFormat ( " yyyy-MM-dd HH:mm:ss " ) ; //Java Date 类型数据格式化格式
@Override
public void intercept ( Invocation inv ) {
try {
2018-11-02 09:46:35 +08:00
logger . info ( " ---------SyncMissionResultStatisticalInterceptor拦截器拦截开始------------ " ) ;
inv . invoke ( ) ;
/ * *
* 处理非周期任务的统计功能
* /
Set < Long > insertMissionIds = SyncData . getThreadlocalInsertMissionIds ( ) ;
2018-11-05 16:18:43 +08:00
logger . info ( " 即将进行统计的所有新增任务的mission_id为: " + JSON . toJSONString ( insertMissionIds ) ) ;
2018-11-02 09:46:35 +08:00
Set < Long > updateMissionIds = SyncData . getThreadlocalUpdateMissionIds ( ) ;
logger . info ( " 即将进行统计的所有修改任务的mission_id为: " + JSON . toJSONString ( updateMissionIds ) ) ;
2018-11-01 16:18:11 +08:00
//根据统计结果更新mission_state_talbe表对应任务的状态
2018-11-02 09:46:35 +08:00
if ( insertMissionIds . size ( ) > 0 ) {
for ( Long missionId : insertMissionIds ) {
StatisticalHandle ( missionId , true ) ;
2018-11-01 16:18:11 +08:00
}
}
2018-11-02 09:46:35 +08:00
if ( updateMissionIds . size ( ) > 0 ) {
for ( Long missionId : updateMissionIds ) {
StatisticalHandle ( missionId , false ) ;
}
}
/ * *
* 处理周期任务的统计功能
* /
2018-11-05 16:18:43 +08:00
Set < Long > loopInsertCurMissionIds = SyncData . getThreadlocalLoopInsertMissionIds ( ) ;
logger . info ( " 即将进行统计的所有周期新增任务的mission_id为: " + JSON . toJSONString ( insertMissionIds ) ) ;
Set < Long > loopUpdateCurMissionIds = SyncData . getThreadlocalLoopUpdateMissionIds ( ) ;
logger . info ( " 即将进行统计的所有周期修改任务的mission_id为: " + JSON . toJSONString ( updateMissionIds ) ) ;
2018-11-02 09:46:35 +08:00
2018-11-05 16:18:43 +08:00
if ( loopInsertCurMissionIds . size ( ) > 0 ) {
for ( Long missionId : loopInsertCurMissionIds ) {
StatisticalLoopHandle ( missionId , true ) ;
}
}
if ( loopUpdateCurMissionIds . size ( ) > 0 ) {
for ( Long missionId : loopUpdateCurMissionIds ) {
StatisticalLoopHandle ( missionId , false ) ;
}
}
2018-11-02 09:46:35 +08:00
// 统计结束后 清空threadLocal中的值
SyncData . removeThreadlocalUpdateMissionIds ( ) ;
SyncData . removeThreadlocalInsertMissionIds ( ) ;
2018-11-05 16:18:43 +08:00
SyncData . removeThreadlocalLoopUpdateMissionIds ( ) ;
SyncData . removeThreadlocalLoopInsertMissionIds ( ) ;
2018-11-01 16:18:11 +08:00
logger . info ( " --------SyncMissionResultStatisticalInterceptor拦截器拦截结束------------ " ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
logger . error ( " SyncMissionResultStatisticalInterceptor拦截器内部程序出现异常信息 " , e ) ;
}
}
2018-11-02 09:46:35 +08:00
/ * *
* 处理非周期任务的统计功能
* /
public void StatisticalHandle ( Long missionId , boolean isInsert ) {
2018-11-01 16:18:11 +08:00
logger . info ( " 根据当前任务id为: " + missionId + " 开始统计 " ) ;
// mission_state_table 状态值
Integer status = null ;
List < Record > results = Db . use ( ) . find ( " select result from ( \ r \ n " +
" (select result,mission_id from mission_result_table1 mrt) union all \ r \ n " +
" (select result,mission_id from mission_result_table4 mrt) union all \ r \ n " +
" (select result,mission_id from mission_result_table6 mrt) \ r \ n " +
" ) t \ r \ n " +
" left join mission_state_table mst on mst.mission_id = t.mission_id \ r \ n " +
" where mst.is_loop = 0 and mst.mission_id=? " , missionId ) ;
boolean noThree = true ;
if ( null ! = results & & results . size ( ) > 0 ) {
for ( Record record : results ) {
if ( record . getInt ( " result " ) = = 3 ) {
noThree = false ;
}
}
}
// 判断任务结果有没有状态值为3的 如果有 则任务状态为在下发
Record result = Db . use ( ) . findFirst ( " select t.mission_id,t.ok,t.fail,t.total from ( \ r \ n " +
" (select mrt.mission_id,sum(CASE mrt.result when 0 THEN 1 ELSE 0 end) ok,sum(CASE mrt.result when 1 then 1 when -1 then 1 else 0 end) fail,count(mrt.seq_id) total from mission_result_table1 mrt group by mrt.mission_id) union all \ r \ n " +
" (select mrt.mission_id,sum(CASE mrt.result when 0 THEN 1 ELSE 0 end) ok,sum(CASE mrt.result when 1 then 1 when -1 then 1 else 0 end) fail,count(mrt.seq_id) total from mission_result_table4 mrt group by mrt.mission_id) union all \ r \ n " +
" (select mrt.mission_id,sum(CASE mrt.result when 0 THEN 1 ELSE 0 end) ok,sum(CASE mrt.result when 1 then 1 when -1 then 1 else 0 end) fail,count(mrt.seq_id) total from mission_result_table6 mrt group by mrt.mission_id) \ r \ n " +
" ) t \ r \ n " +
" left join mission_state_table mst on mst.mission_id = t.mission_id \ r \ n " +
" where mst.is_loop = 0 and t.mission_id = ? " , missionId ) ;
if ( null ! = result ) {
Integer okCount = result . getInt ( " ok " ) ;
Integer failCount = result . getInt ( " fail " ) ;
Integer total = result . getInt ( " total " ) ;
if ( okCount + failCount = = total ) {
if ( failCount = = 0 ) {
status = 30 ;
} else if ( okCount = = 0 ) {
status = 31 ;
} else {
status = 32 ;
}
}
if ( ! noThree ) {
status = 2 ;
}
logger . info ( " 统计完成 修改mission_state_table状态为:? 总个数:?执行数:? 成功:? 失败:? " ) ;
String missionStateAutoDesc = null ;
2018-11-02 09:46:35 +08:00
if ( isInsert ) {
Record missionStateTable = Db . use ( ) . findFirst ( " select * from mission_state_table where mission_id = ? " , missionId ) ;
if ( null ! = missionStateTable & & null ! = missionStateTable . get ( " auto_desc " ) & & missionStateTable . getStr ( " auto_desc " ) . length ( ) > 0 ) {
return ;
}
missionStateAutoDesc = format . format ( System . currentTimeMillis ( ) ) + " i18n_server.MissionConstants.NOTICE_TASK_RUNNING_n81i </br> " ;
}
2018-11-01 16:18:11 +08:00
if ( okCount + failCount = = total ) {
missionStateAutoDesc = format . format ( System . currentTimeMillis ( ) ) + " i18n_sserver.UpgradeService.sql.complate_n81i " + total + " i18n_sserver.UpgradeService.sql.executeNode_n81i " + okCount + " i18n_sserver.UpgradeService.sql.failed_n81i " + failCount ;
}
String missionStateDesc = " \ r \ n " +
" i18n_server.UpgradeService.sql.total_n81i " + total + " i18n_server.UpgradeService.sql.executeNode2_n81i, </br> " + ( total - okCount - failCount ) + " i18n_server.UpgradeService.sql.unexecute_n81i, </br> " + ( okCount + failCount ) + " i18n_server.UpgradeService.sql.execute_n81i【i18n_server.UpgradeService.sql.success_n81i " + okCount + " i18n_sserver.UpgradeService.sql.failed_n81i " + failCount + " 】 " ;
Record missionStateTableResult = new Record ( ) ;
missionStateTableResult . set ( " mission_id " , missionId ) ;
missionStateTableResult . set ( " mission_state " , status ) ;
missionStateTableResult . set ( " mission_state_desc " , missionStateDesc ) ;
if ( missionStateAutoDesc ! = null ) {
missionStateTableResult . set ( " auto_desc " , missionStateAutoDesc ) ;
}
Db . use ( " masterDataSource " ) . update ( " mission_state_table " , " mission_id " , missionStateTableResult ) ;
}
logger . info ( " 修改mission_state_table信息完成 " ) ;
}
2018-11-02 09:46:35 +08:00
/ * *
* 处理周期任务的统计功能
* /
2018-11-05 16:18:43 +08:00
public void StatisticalLoopHandle ( Long curMissionId , boolean isInsert ) {
Record loopmissionStateTableInfo = Db . use ( ) . findFirst ( " select * from loopmission_state_table where cur_mission_id = ? " , curMissionId ) ;
String missionDesc = " " ;
Integer status = null ;
String autoDesc = " " ;
Record missionTableInfo = null ;
Integer missionState = null ;
// 判断任务状态为1 根据同步结果数据 修改为状态2 正在执行
if ( null ! = loopmissionStateTableInfo ) {
missionTableInfo = Db . use ( ) . findFirst ( " select * from mission_state_table where mission_id = ? " , loopmissionStateTableInfo . getLong ( " mission_id " ) ) ;
if ( null ! = missionTableInfo & & missionTableInfo . getInt ( " mission_state " ) . equals ( 1 ) & & isInsert ) {
missionTableInfo . set ( " mission_state " , 2 ) ;
if ( null = = missionTableInfo . getStr ( " auto_desc " ) ) {
missionTableInfo . set ( " auto_desc " , format . format ( System . currentTimeMillis ( ) ) + " i18n_server.LoadNewMissionThread.missionStart_n81i " ) ;
}
Db . update ( " mission_state_table " , missionTableInfo ) ;
}
2018-11-09 16:14:54 +08:00
// 修改周期任务的执行状态
2018-11-05 16:18:43 +08:00
Record result = Db . use ( ) . findFirst ( " select lmst.mission_id missionId, t.ok, t.fail, t.total \ r \ n " +
" from (select mrt.mission_id, \ r \ n " +
" ifnull(sum(case mrt.result when 0 then 1 else 0 end), 0) ok, \ r \ n " +
" ifnull(sum(case mrt.result when 1 then 1 when -1 then 1 else 0 end), 0) fail, \ r \ n " +
" count(mrt.seq_id) total \ r \ n " +
" from mission_result_table4 mrt \ r \ n " +
" group by mrt.mission_id) t \ r \ n " +
" left join (select max(lst.cur_mission_id) cur_mission_id, lst.mission_id \ r \ n " +
" from mission_result_table4 mrt4 \ r \ n " +
" left join loopmission_state_table lst on mrt4.mission_id = lst.cur_mission_id \ r \ n " +
" group by lst.mission_id) lmst \ r \ n " +
" on lmst.cur_mission_id = t.mission_id \ r \ n " +
" left join mission_state_table mst \ r \ n " +
" on mst.mission_id = lmst.mission_id \ r \ n " +
" where lmst.cur_mission_id is not null and mst.is_loop=1 \ r \ n " +
" and mst.mission_id = ? " , loopmissionStateTableInfo . getLong ( " mission_id " ) ) ;
if ( null ! = result ) {
if ( null ! = result . get ( " missionId " ) & & result . getStr ( " missionId " ) . length ( ) > 0 ) {
Long ok = result . getLong ( " ok " ) ;
Long fail = result . getLong ( " fail " ) ;
Long total = result . getLong ( " total " ) ;
missionDesc = " 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 + " 】 " ;
}
}
2018-11-09 16:14:54 +08:00
if ( isInsert ) {
missionState = loopmissionStateTableInfo . getInt ( " mission_state " ) ;
Integer missionTableInfoState = missionTableInfo . getInt ( " mission_state " ) ;
switch ( missionState ) {
case ( 3 ) :
Record findFirst = Db . use ( ) . findFirst ( " select COUNT(*) count from loopmission_state_table where mission_id = ? and mission_state=0 " , loopmissionStateTableInfo . getLong ( " mission_id " ) ) ;
if ( findFirst . getInt ( " count " ) . equals ( 0 ) & & missionTableInfoState ! = 3 ) {
status = 3 ;
autoDesc = format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i " ;
}
break ;
case ( 4 ) :
if ( missionTableInfoState ! = 4 ) {
status = 4 ;
autoDesc = format . format ( System . currentTimeMillis ( ) ) + " Task execution failure " ;
}
break ;
case ( 6 ) :
if ( missionTableInfoState ! = 6 ) {
status = 6 ;
autoDesc = format . format ( System . currentTimeMillis ( ) ) + " Task revocation start execute " ;
}
break ;
case ( 7 ) :
if ( missionTableInfoState ! = 7 ) {
status = 7 ;
autoDesc = format . format ( System . currentTimeMillis ( ) ) + " i18n_server.UpgradeService.sql.revoke_n81i " ;
}
break ;
}
2018-11-05 16:18:43 +08:00
}
2018-11-09 16:14:54 +08:00
2018-11-05 16:18:43 +08:00
Record missionStateTableResult = new Record ( ) ;
missionStateTableResult . set ( " mission_id " , loopmissionStateTableInfo . get ( " mission_id " ) ) ;
if ( status ! = null ) {
missionStateTableResult . set ( " mission_state " , status ) ;
}
if ( missionDesc . length ( ) > 0 & & null ! = missionState & & missionState ! = 6 & & missionState ! = 7 ) {
missionStateTableResult . set ( " mission_state_desc " , missionDesc ) ;
}
if ( autoDesc . length ( ) > 0 ) {
missionStateTableResult . set ( " auto_desc " , autoDesc ) ;
}
Db . use ( " masterDataSource " ) . update ( " mission_state_table " , " mission_id " , missionStateTableResult ) ;
}
2018-11-02 09:46:35 +08:00
}
2018-11-01 16:18:11 +08:00
}