《银行卡作业调度与监控管理系统详细设计说明书(后台).docx》由会员分享,可在线阅读,更多相关《银行卡作业调度与监控管理系统详细设计说明书(后台).docx(165页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、银行卡作业调度监控系统详细设计说明书(后台)5.2. 5.1.2基础数据区表1585.2. 5.1.3中间表1585.2. 5.1.4应用区表1585. 2. 5. 2统计方法1585 2. 6发卡方交易其中项统计1595. 2. 6. 1数据来源1596.1. 1源系统表1595.2. 6.1.2基础数据区表1592. 6.1. 3中I,可表1605.3. 6.1.4应用区表1606.1.5报表区表1605. 2. 6. 2统计方法1605 2. 7受理方交易其中项统计1635. 2. 7. 1数据来源1637.1. 1源系统表1635.2. 7.1.2基础数据区表1637.1.3中间表16
2、35.3. 7.1.4应用区表1637.1.5报表区表1635. 2. 7. 2统计方法1635. 2. 8国际卡收单交易统计1655. 2. 8. 1数据来源1652. 8.1. 1源系统表1655.1. 8.1.2基础数据区表1668.1.3中间表1665.2. 8.1.4应用区表1662. 8.1. 5报表区表1665. 2. 8. 2统计方法1665.3 其他分析类1665. 3. 1商户设备统计表(CA_SHOP_TERM) 1665. 3. 1. 1数据来源1661. 1. 1源系统表1665.3. 1. 1.2基础数据区表1663. 1. 1. 3中间表1665.4. 1. 1.
3、4应用区表1661. 1.5报表区表1675. 3. 1. 2数据项统计方法1673. 1.2. 1受理网点统计1675. 3. 1. 2. 2共享 pos 和 ATM 统计1673. 1. 2. 3零扣率和非零扣率统计1676. 3. 1. 2. 4商户消费大类统计1673 1 2 o J VII 1 87. 3. 1.2.6 自有商户统计168if (nSucFlg =1) /*成功*/EXEC SQL SELECT used_parall_num INTO :nUsedParallNumFROM node infoWHERE node_id=:szNodeld; if ( nUsedPa
4、rallNum 0 )nUsedParalINum;EXEC SQL UPDATE node_info set used_parall_num=:nUsedParalINum WHERE node_id=:szNodeld;if (sqlca.sqlcode = SQLC0DE_N0TF0UND) else if ( !VERIFY_SQL_NORMAL()/*5、删除大作业WHERE node_id= :szNodeldANDEXEC SQL DELETE huge_job_status job_id=:szjobld;EXEC SQL COMMIT;if ( !VERIFY_SQL_NOR
5、MAL()DisconnectDatabase();return -1;)DisconnectDatabase();PrintLogX (4, pszLogFileName, z,%-s 节 点 %-s 处 理完成 !”, ,/ProcData,/, szNodeld);return 0;)6程序运行环境本程序是ProcServices的子程序。3.16. 7 返回值-1:作业状态更新失败;0:作业状态更新成功。3.17终止作业调度模块3. 17. 1 程序名第86页终止作业调度(ExitService)o3.17. 2 程序功能说明本程序在所有作业运行后,结束所有进程,终止系统运行。程序接口
6、输入:接口报文comstru程序处理流程3.17. 5详细描述int ExitService(PCOMSTRU pcomstru, char *szLogFileName) (char szCmd 500+1 ; /*执行命令*/char szCfgPath100+1;int nRetCode=0;TIMESTRU timestru;/*定义时间结构变量*/timestru = GetTime () ;/*获取当前时间*/memset(szCmd, 0, sizeof(szCmd);TrimString(pcomstru-szProgPath);TrimString (pcomstru-szP
7、rogName);/*1、检查待执行终止调度服务以“q”开头*/if (pcomstru-szProgName0!= q)nRetCode=l;第87页return (nRetCode);/* 2、组装命令行*/sprintf (szCmd, zz%-s/%-s l%-s.%02d 2%-s. %02d,pcomstru-szProgPath ,pcomstru-szProgName, szLogFileName, timestru. nDay, szLogFileName, timestru. nDay);/* 3、执行命令行*/ nRetCode =system(szCmd); nRetC
8、ode = (nRetCode 8);/*4、组织应答信息*/strcpy (pcomstru-szReqFlg, z/0,z) ; /*请求或响应标志 0-请求 1-响应*/ sprintf (pcomstru-szRetCode,nRetCode);sprintf (pcomstru-szFileSize,,z%-20. 20s,);memset(szCmd, 0, sizeof(szCmd);/*4、查询进程运行状态*/sprintf (szCmd, %-s/%-s %-s l%-s.%02d 2%-s. %02d,z,pcomstru-szProgPath ,,znotiprgstat
9、us,/, pcomstru-szProgName, szLogFileName, timestru. nDay, szLogFileName ,timestru. nDay);PrintLogX(4, szLogFileName, /zExitService 的执行命令s,szCmd);nRetCode =system (szCmd);nRetCode =(nRetCode 8);return (nRetCode);本程序运行环境:本程序是afbcswitch的子程序,是notiprgstatus父程序。3. 18查询作业调度情况18. 1 程序名程序作业调度情况(ChkService)。3
10、. 18. 2程序功能说明查询作业的运行状态。4. 18. 3程序接口输入:接口报文comstru5. 18. 4程序处理流程第88页18. 5 详细描述int ChkService(PCOMSTRU pcomstru, char *szLogFileName) char szCmd 500+1 ; /*执行命令*/char szCfgPath100+l;int nRetCode=0;TIMESTRU timestru;/*定义时间结构变量*/timestru = GetTime () ;/*获取当前时间*/memset(szCmd, 0, sizeof(szCmd);TrimString(p
11、comstru-szProgPath);TrimString (pcomstru-szProgNamc);memset(szCmd, 0, sizeof(szCmd);/* 1、组装查询进程运行状态的命令行*/sprintf (szCmd, /z%-s/%-s %-s l%-s.%02d 2%-s. %02dz/, pcomstru-szProgPath ,,/notiprgstatus,/, pcomstru-szProgName, szLogFileName, timestru. nDay, szLogFileName ,timestru. nDay);/* 2、执行命令行*/nRetCo
12、de =system (szCmd);nRetCode =(nRetCode 8);/*3、组织应答信息*/strcpy (pcomstru-szReqFlg, /z0,z) ; /*请求或响应标志 0-请求 1-响应*/sprintf(pcomstru-szRetCode, %4d,nRetCode);sprintf (pcomstru-szFileSize,,z%-20. 20s,);return (nRetCode);第89页3.18. 6本程序运行环境本程序是afbcswitch的子程序,是notiprgstatus父程序。3. 19重建作业链3.18. 7 程序名重建作业链 (csa
13、sjobrelinit jobrelinit)o3. 18. 8程序功能说明建立作业系统的作业链,根据job_relation的运行周期动态生成 job_rel_statuso3. 18. 9程序接口输入:输出:3.18.10程序处理流程1、置作业链重建程序状态表create_job_relation的处理状态 (prg.status)从S至P状态,使得系统处于作业链重建状态EXEC SQL UPDATE create job_relation SET prg_status=,P;2、删除作业管理处理表(joblre匚status)中的记录即清空作业间的依 赖关系;EXEC SQL Delet
14、e from job_rel_status ;3、从作业表(job)中依次查出要运行的作业(run_flag=1),并根据调 度日期结合此作业的处理模式,判断该作业在本调度日期是否运行;4、将本调度日期运行作业的关系链从作业关系表(job_relation)复制到 作业关系处理表(job_rel_status)中。5、依次查找将不运行作业作为父作业的记录,查出该不运行父作业的对应 的实际运行父作业集、及其运行子作业集。6、删除job_rel_status中全部不运行作业作为父作业的关系链。7、将第5步查出的父作业集和子作业集作笛卡尔积,插入job_rel_status 中。8、作业链重建完成,
15、修改create_job_relation的prg_status从P至N 状态。(表示控制台可以往下更改作业关系的启动状态,即把up_job_id=的 作业设成S,C状态,从而启动调度系统)详细描述:7/ 7/ 7/ q. q. q./xjx ZTS ZjS XTX ZjX调度系统,日终初始化的时候,根据job的运行情况,重建作业层级关系* 现代调度系统除了每天不运行或运行作业外,还能处理年初末、月初末、周末、旬、半年初末作业等,系统可以自定义。* 作业有如下几个运行状态:* 一、作业不运行二、作业运行,但是在满足如下条件之一的,才运行:* 1、每天处理(every day running,以
16、下简称RRR):表示此作业每天运行;第90页* 2、指定月的某日处理(special day running,以下简称nnR, nn是数字):表示此作业在2-27(大月包含28、29、30,小月包含28、29,闰月包含28)日中的指定日 运行;* 3、周六处理(Saturday running,以下简称W6R):表示此作业在每周六运行;* 4、周日处理(Sunday running,以下简称W7R):表示此作业在每周日运行;* 5、周 6、上旬初处理(early 末处理(Saturdayfe Sunday running,以下简称WER):表示此作业在每周六、日运行;* start-month
17、 running,以下简称EMS):表示此作业在每上旬的第一天运行;* 7上旬末处理(early encHnonth running,以下简称EME):表示此作业在每上旬的最末一天运行;* 8、中旬初处理(middle start-month running,以下简称MMS):表示此作业在每中旬的第一天运行;* 9、中旬末处理(middle end-month running,以下简称MME):表示此作业在每中旬的最末一天运行;* 10下旬初处理(last start-month running,以下简称LMS):表示此作业在每下旬的第一天运行;* 11下旬末处理(last end-month
18、 running,以下简称LME):表示此作业在每下旬的最末一天运行;* 12、旬初处理(ten-days start-month running,以下简称 TMS):表示此作业在每旬的第一天运行;* 13旬末处理(ten-days end-month running,以下简称TME):表示此作业在每旬的最末一天运行;* 14月初处理(start-month running,以下简称MSR):表示此作业在每月的第一天运行;* 15月末处理(end-month running,以下简称MER):表示此作业在每月的最末一天运行;* 16上半年末处理(early half end-year runn
19、ing,以下简称EHE):表示此作业在06月30日运行;* 17 下半年初处理(last half start-year running,以下简称 LHS):表示此作业在07月1日运行;* 18年初处理(start-year running,以下简称YSR):表示此作业在01月01日运行;* 19年末处理(end-year running,以下简称YER):表示此作业在12月31日运行;*/ttinclude ttinclude ttinclude Aftinclude */ttinclude 第91页ttinclude gfx.httinclude apcomm. hEXEC SQL INC
20、LUDE sqlca;EXEC SQL INCLUDE apmsgabas. h,z;extern int errno;NodeJobLink CreateNodeJobList(NodeJobLink Head, char *pszNodeId, char *pszjobld, char *pszLogFileName);NodeJobLink ProcRunParentJob(NodeJobLink pParentList, char *pszNodeId, char*pszjobld, char *pszQryDate, char *pszLogFileName);NodeJobLink
21、 ProcRunChiIdjob(NodeJobLink pChildList, char *pszNodeId, char*pszjobld, char *pszQryDate, char *pszLogFileName);/*递归处理节点*/void JobRellnit(char *szQryDate, char *pszDbServer, char *pszDbUser, char *pszDbPwd, char *pszDbName, char *pszLogFi1eName)int nMsgId=0;int nFd;char szBuffer500+1;char szCfgPath
22、 100 + 1 ; /*队列目录*/int i=0,j=0;int nSucFlg=0, nSucFlgl=0; /*成功标志 0-不成功 1-成功*/unsigned int nMultiCount =0; /*循环计数器,如果是5的整倍数,就可以检查须 重发的*/int nIterNum=0; /*当前轮寻的次数*/int nExec_Flag=0;EXEC SQL BEGIN DECLARE SECTION;charszDbServerLEN_SERVER DATABASE+1charszDbUserLEN_USER_DATABASE+11charszDbPwdLEN_PWD_DATA
23、BASE+1charszDbNameLEN_NAME_DATABASE+1charszNodeld5 +1;charszTmpNodeld5 +1; /*临时节点信息变量*/charszjobld20+1;charszUpNodeld5 +1;charszUpJobld20+1;int nCount;JOBRUNSTRU jobrunstru;EXEC SQL END DECLARE SECTION; /*申请两个链表指针*/NodeJobLink第92页ParentList=NULL, pParentList=NULL, ChildList=NULL, pChildList=NULL, lP
24、arent=NULL, 1 Chi Id=NULL;NodeJobList strParentList, strChildList, sParentList, sChildList;NodeJobLink Pointer;/*节点声明*/ParentList = &strParentList;ChildList = &strChildList;memset(festrParentList, 0, sizeof(strParentList);memset(festrChildList, 0, sizeof(strChildList);pParentList = fesParentList;pCh
25、ildList = &sChildList;memset(fesParentList, 0, sizeof(sParentList);memset(fesChildList, 0, sizeof(sChildList);strcpy (szDbServer, pszDbServer);strcpy (szDbUser, pszDbUser);strcpy (szDbPwd, pszDbPwd);strcpy (szDbName, pszDbName);strcpy (szCfgPath, pszLogFileName);RFindString(szCfgPath,;RFindString(sz
26、CfgPath,?/?);/*连接数据库 ConnectDatabaseEXEC SQL CONNECT :szDbUser IDENTIFIED BY :szDbPwd USING :szDbServer;if ( !VERIFY_SQL_NORMAL()/*连接数据库服务器失败,不正常退出*/exit(-50);EXEC SQL USE :szDbName;if ( !VERIFY SQL NORMAL()(/*翻开数据库服务器失败,不正常退出*/DisconnectDatabase ();exit (-50);)/*1、修改create_job_relation的prg_status从S
27、至P状态,使得系统处于作业链重建状态);*/第93页/* S、启动状态,使得系统处于作业链重建状态,修改create_job_relation 的 prg_status 从S到P状态*/EXEC SQL UPDATE create_job_relation SET prg_status=,;if (!VERIFY_SQL_NORMAL()(/*更新表 create_job_relation 的 prg_status 不成功*/Di sconnectDatabase ();exit (-53);EXEC SQL COMMIT;/* 2、清空job_rel_status依赖关系,全部删除此表中的记
28、录,以便下步操作*/EXEC SQL Delete from job relstatus ; if (sqlca.sqlcode = 100) (PrintLogX (4, pszLogFileName, z/%-s程序,此表没有数据不需清空,成功 ,“JobRellnit);) else if (!VERIFY_SQL_NORMAL() (/*清空 job_rel_status 表失败*/;DisconnectDatabase ();exit (-53); else (/*清空 job_rel_status 表成功*/ )EXEC SQL COMMIT;/ /XT*3、从job的每一个作业查
29、找运行标志为T的作业(其中1表示要运行),抽取 两个标志 run flag 和 proc mode.KE*/zts ZlS Zr%zTs zTs ZlS ZlS ZlS zfs Z|S Z1S /EXEC SQL DECLARE Cursorjob CURSOR FORSELECT node_id, job_id, run_flag, proc_modefrom job whererun_flag=,1;第94页if ( !VERIFY_SQL_NORMAL() (/*定义游标Cursorjob失败*/EXEC SQL DEALLOCATE CURSOR CursorJob;Disconnec
30、tDatabase ();exit (-54);EXEC SQL OPEN CursorJob;if ( !VERIFY_SQL_NORMAL() (/*翻开游标失败*/EXEC SQL CLOSE CursorJob;EXEC SQL DEALLOCATE CURSOR CursorJob;DisconnectDatabase (); exit (-54);)while (1) (memset(&jobrunstru, 0, sizeof(JOBRUNSTRU);EXECSQLFETCHCursorjobINTO :jobrunstru. szNodeld, :jobrunstru. szj
31、obld, :jobrunstru. szRunFlag, :jobrunstr u. szProcMode;if (sqlca. sqlcode = 100) /*读取Job信息表已经完毕或没有数据,退出循环*/ nSucFlg=l ;/*正常处理完毕*/ break ;if (!VERIFY_SQL_NORMAL() (/* Fetch error */ break ; / /XT*4、计算调度日期exejdate,生成符合19个处理模式(除RRR,nnR标志外)内符合条件的标志current proc mode ;在proc mode 1Tl查找RRR或nnR或 current_proc
32、_mode.* nExec_F1ag=Chk_Proc_Mode(szExec_Date, szProc_Mode)* 如果nExec_Flag=L那么在调度为exec_date这个日期,此作业运行,否那么不 运行;第95页手工采集项统计1685. 3. 2商户设备汇总表(CA_SHOP_TERM_SUM) 1695. 3. 2. 1数据来源1695. 3. 2. 1 1 1695.3.2. 1.2基础数据区表1695.3.2. 1.3中间表1695.3.2. 1.4应用区表1695.3.2. 1.5报表区表1695. 3. 2. 2统计方法1695. 3, 3准贷记卡风险表(CA CR RI
33、SK) 1695. 3. 3. 1数据来源1693. 1. 1源系统表1695.3. 3. 1.2基础数据区表1693. 1.3中间表1705.4. 3. 1.4应用区表1703. 1.5报表区表1705. 3. 3. 2统计方法1705. 3, 4准贷记卡风险汇总表(CA_CR_RISK_SUM) 1715. 3. 4. 1数据来源1714. 1. 1源系统表1715.3. 4. 1.2基础数据区表1714. 1.3中间表1715.4. 4. 1.4应用区表1713. 4. 1. 5报表区表1715. 3. 4. 2统计方法1715. 3. 5准贷记卡透支汇总表(CA_CR_OVER_SUM
34、) 1725. 3. 5. 1数据来源1725. 1. 1源系统表1725.3. 5. 1.2基础数据区表1725. 1.3中间表1725.4. 5. 1.4应用区表1725. 1.5报表区表1725. 3. 5. 2统计方法1725. 3. 6银行卡收入支出统计表(CAN_0UT) 7725. 3. 6. 1数据来源1726. 1. 1源系统表1725.3. 6. 1.2基础数据区表1736. 1.3中间表1735.4. 6. 1.4应用区表1733. 6. 1. 5报表区表1735. 3. 6. 2统计方法1735. 3. 7银行卡收入支出汇总表(CA_IN_OUT_SUM) 1745.
35、3. 7. 1数据来源1747. 1. 1 源系统表174nExec_Flag=O;nExec_Flag=Chk_Proc_Mode(szQryDate, jobrunstru. szProcMode, pszLogFileName);if ( nExec_Flag=l)/*5、如果存在,那么把job_relation表中的关系链放入到job_rel_status 中。从job选取下一条,转第一步,直到结束。*/EXECSQLINSERTINTOjob_rel_status(node_id, job_id, up_node_id, up_job_id, proc_status, up_proc
36、_status)select node_id, job_id, up_node_id, up_job_id, N , N from job relationwherenode_id=:jobrunstru. szNodeldandjob_id=:jobrunstru. szjobld;if (sqlca. sqlcode =二 100) ;/*job_relation中没有该作业的作业链*/)else if (!VERIFY_SQL_NORMAL()(/* 插入 job_rel_status 表出错 */ break ;else;/* 插入 job_rel_status 表成功 */) /*
37、while end */EXEC SQL CLOSE CursorJob;EXEC SQL DEALLOCATE CURSOR CursorJob;EXEC SQL COMMIT;if (nSucFlg =1) (PrintLogX(4, pszLogFileName,,z%-s程序,正常处理待运行作业处理完 毕, JobRellnit);) elsePrintLogX(4, pszLogFileName,,z%-s程序,正常处理待运行作业处理失败,请检查,JobReHnit);DisconnectDatabase ();第96页exit (-54);)nSucFlg =0;6、准备重建依赖关
38、系。*从job的每一个作业查找运行标志为0(不运行)的作业,抽取1个标志run_flag.主要目的,查找不运行作业,* 以便剔除从第3步获得不运行的父亲作业。EXEC SQL DECLARE Cursorjobl CURSOR FORSELECT node_id, job id, run_flag, proc mode from job ; /*where run_f lag=,O不运行*/if ( !VERIFY_SQL_NORMAL()(/*定义游标Cursorjobl失败*/EXEC SQL DEALLOCATE CURSOR Cursorjobl;DisconnectDatabase
39、();exit (-54);)EXEC SQL OPEN Cursorjobl;if ( !VERIFY_SQL_NORMAL()Aopen 游标 Cursorjobl 失败*/EXEC SQL CLOSE Cursorjobl;EXEC SQL DEALLOCATE CURSOR Cursorjobl;DisconnectDatabase();PrintLogX(4, pszLogFileName,,z%-s 程序,不正常退出!, JobRellnit); exit (-54);)i=0;while (1)/*外循环*/memset(&jobrunstru, 0, sizeof(JOBRUN
40、STRU);EXECSQLFETCHCursorjoblINTO :jobrunstru.szNodeld, :jobrunstru. szjobld,:jobrunstru. szRunFlag, :jobrunstru. szPr ocMode;if (sqlca.sqlcode 二二 100)(/*读取Job信息表已经完毕或没有数据*/ nSucFlg=l ;/*正常处理完毕*/ break ;第97页if (!VERIFY_SQL_NORMAL() /*读取Job信息表出错*/ break ;nExec_Flag=O;if (jobrunstru. szRunFlagO= 1)/*初步
41、判定这个作业可能运行,但是还要 根据运行模式最终判定*/nExec_Flag=Chk_Proc_Mode(szQryDate, jobrunstru. szProcMode, pszLogFileName); if ( nExec_Flag=l)/*该作业在本调度日期运行,继续循环*/ continue;/*处理不运行作业和根据运行模式得出不运行的作业*/*5、以不运行作业为基,在jobjrelation表中保存此作业的父亲作业。* 放入父亲队列ParentList中;*/EXEC SQL DECLARE CurJobRelation CURSOR FORSELECT up_node_id,
42、up job_id from job_relationwherenode_id=:jobrunstru. szNodeldandjob id=:jobrunstru. szjobld;if ( !VERIFY_SQL_NORMAL() /*定义游标失败*/EXEC SQL DEALLOCATE CURSOR CurJobRelation; break;EXEC SQL OPEN CurJobRelation;if ( !VERIFY_SQL_NORMAL() /*翻开游标失败*/EXEC SQL CLOSE CurJobRelation;EXEC SQL DEALLOCATE CURSOR C
43、urJobRelation; break;while(l)/*内循环1*/*抓不运行作业的父亲作业*/第98页 memset(szUpNodeld, 0, sizeof(szUpNodeld);memset(szUpJobld, 0, sizeof(szUpJobld);EXEC SQL FETCH CurJobRelation INTO :szUpNodeld, iszUpJobld;TrimString(szUpNodeld);TrimString(szUpJobld);if (sqlca.sqlcode = 100) (/*读取Job_relation信息表已经完毕或没有数据*/ nSu
44、cFlgl=1 ;/*正常处理完毕1*/ break ;if (!VERIFY_SQL_NORMAL()(/*出错*/ break ; /*在这里还需判定这个父作业是否可运行,如果不运行,那么继续跟踪它的父 作业*/pParentList = fesParentList;memset(fesParentList, 0, sizeof(sParentList);pParentList=ProcRunParentJob(pParentList, szUpNodeld, szUpJobld, szQryDate, pszLog FileName);/*获取的需要运行上级作业集*/if (pParen
45、tList-szNodeId0!=0) Pointer=pParentList;ParentList=CreateNodeJobList(ParentList, (char*)Pointer-szNodeId, (char *)Pointer-szJobId,pszLogFileName); while(Pointer-Next !=NULL) (Pointer=Pointer-Next;ParentList=CreateNodeJobList(ParentList, Pointer-szNodeId, Pointer-szjobld,psz LogFileName);FreeNodeJobList(pParentList);第99页EXEC SQL CLOSE CurJobRelation;EXEC SQL DEALLOCATE CURSOR CurJobRelation;if (nSucFlgl =1)PrintLogX (4, pszLogFileName, /z%-s程序,处