《定时任务开发文档》由会员分享,可在线阅读,更多相关《定时任务开发文档(7页珍藏版)》请在金锄头文库上搜索。
1、698698 定时任务开发文档定时任务开发文档1.数据库设计数据库设计1.11.1 定时任务表定时任务表( (任务制作任务制作) ) EA_TimeTaskEA_TimeTask 序号字段名中文名 说明1Name任务名称2 2SrvNoSrvNo服务器号服务器号仅对手动任务有效仅对手动任务有效2IsHand是否手动0:否 1 是3TimeType时间类型0:日 1:月 2:周期性4ExecTime执行起始时间时间类型为日时:时、分、秒有效时间类型为月时:日、时、分、秒有效时间类型为周期性时:无效5IntervalTime间隔时间-1:月 0:日 其他:周期性(在时间类型为周期性时有效)6Ena
2、ble是否起用0:停止 1:启动 7Uri唯一标识本条记录的唯一标识8FlowUri数据类型唯一标识本条记录的数据类型,用于权限控制备注:服务器号 SrvNo仅对手动任务有效,系统在形成批量任务时,应读取服务器信息,并增加相应的任务记录。1.21.2 定时任务配置项定时任务配置项( (任务制作任务制作) ) EA_TimeTaskItemEA_TimeTaskItem序号字段名中文名 说明1Name名称2TermBuff终端数据单元遵循采集系统内部交换规范3AmmeterBuff表数据单元遵循采集系统内部交换规范4ProtocolUri终端协议唯一标识指向 ES_CODEVALUE 中的 Ur
3、i ;直接存协议号;5AmmeterProtocolUri表协议唯一标识指向 ES_CODEVALUE 中的 Uri 直接存协议号;6Bsys系统配置0:用户配置,界面上可修改;1:系统配置, 界面上不能修改7 7ItemTypeItemType配置项类型配置项类型0:0:一般一般 1:1:穿透抄穿透抄8 8ItemObjItemObj配置项对象配置项对象bit0:bit0:终端终端 bit1:bit1:总加组总加组 bit2:bit2:测量点测量点(485(485 全能表全能表) ) bit3:bit3:测量点测量点(485(485 简易表简易表) )bit4:bit4: 测量点测量点( (
4、脉冲表脉冲表) ) bit5:bit5: 测量点测量点(A(A 相电压模拟量相电压模拟量) )bit6:Bbit6:B 相电压模拟量相电压模拟量 bit7:Cbit7:C 相电压模拟量相电压模拟量 bit8:Abit8:A 相电流模相电流模拟量拟量 bit9:Bbit9:B 相电流模拟量相电流模拟量 bit10:Cbit10:C 相电流模拟量相电流模拟量 bit11:bit11:直直流模拟量流模拟量9 9DateTypeDateType时间类型时间类型0:0:实时实时 1 1:日:日 2:2:月月 3:3:曲线曲线10Uri唯一标识本条记录的唯一标识11FlowUri数据类型唯一标识本条记录的
5、数据类型,用于权限控制 备注:配置项对象 ItemObj:bit0,bit1,(bit2、bit3、bit4 可以同时生效),bit5,bit6,bit7,bit8,bit9,bit10,bit11 不能同时有效;1.31.3 定时任务定义表定时任务定义表( (任务制作任务制作) ) EA_TimeTaskDefEA_TimeTaskDef序号字段名字段名中文名说明 1TaskUri任务唯一标识指向 EA_TimeTask Uri;描述所属定时任务2ObjType对象类型描述 ObjUri;可为:专变用户公变用户群组部门3ObjUri对象唯一标识专变用户公变用户:指向 EB_GridObjEB
6、_GridObj UriUri群组:指向 EA_Cluster Uri部门:指向 ES_DEPARTMENT Uri4CfgUri配置唯一标识指向 EA_TimeTaskItem Uri5Uri唯一标识本条记录的唯一标识备注:EA_TimeTaskDef 没有 FlowUri 字段,它的修改权限由所属定时任务 EA_TimeTask 决定1.41.4 任务执行历史记录任务执行历史记录( (任务运行任务运行) ) EA_TimeTaskHistoryEA_TimeTaskHistory序号字段名中文名说明1TaskUri任务唯一标识指向 EA_TimeTask Uri;2LastTime最近执行
7、时间每次任务执行时,修改为任务执行起始时间3NumTime数字时间每次任务执行时,修改为任务执行起始时间4N执行次数每次任务执行时 + 14 4SrvNoSrvNo服务器编号服务器编号服务器编号服务器编号5Uri唯一标识本条记录的唯一标识备注: EA_TimeTaskHistory 中的记录由定时任务库新增、修改;客户端在删除EA_TimeTask 记录时,应同步删除EA_TimeTaskHistory 中所对应记录; 在 EA_TimeTaskHistory 中仅记录“自动”任务;不记录“手动”任务;1.51.5 定时任务日志记录定时任务日志记录( (任务运行任务运行) ) EA_TimeT
8、askMarkEA_TimeTaskMark序号字段名中文名 说明1ChannelGRP通信信道(号)2ExtraInfo通信附加信息3NeedAck是否需要回应帧4Important是否为重要任务5TermUri终端唯一标识6AmmeterUri表唯一标识7PSEQ启动帧序号8IsGBZTerm是否为广播组终端9MSA主站地址10TermProtocol终端协议编号11AmmeterProtocol表计协议编号12Termaddr真正的终端地址13TermZip真正的终端区划码14MasteTermZip主终端区划码15MasteTermAddr主终端地址16AmmeterAddr表计地址1
9、7DateSec采集数据的时间.秒18DateMin采集数据的时间.分19DateHour采集数据的时间.时20DateDay采集数据的时间.日21DateMonth采集数据的时间.月22DateYear采集数据的时间.年23TermLen终端数据单元长度24TermBuff终端数据单元25AmmeterLen表计数据单元长度26AmmeterBuff表数据单元27UriUri唯一标识(帧请求)28TX_STAT状态0:等待 1:成功 2:否认 3:失败29TxCount发送次数30TxTime发送时间31TxTimeNum数字时间32HAND手动标记0:自动 1:手动33StatTime状态
10、时间34StatTimeNum状态数字时间35CfgUri任务配置项标识36TimeType时间类型0:日 1:月 2:周期性marktimenum打标日期创建清单的日期2.对象类设计对象类设计序号 类名说名 1CDataGridObj终端2CDataGridObjSet终端集合3CDataDepartment组织机构4CDataDepartmentSet组织机构集合5CTimedTaskCfg任务6CTimedTaskCfgSet任务集合7CTimedTaskHistory任务历史8CTimedTaskHistorySet任务历史集合9CTimedTaskSupportData支持数据类10
11、CTimedTaskItem任务项11CTimedTask任务12CTimedTaskManager定时任务外部调用接口类3.实现逻辑实现逻辑3.1 int CTimedTaskManager: ClearMark(std:vector 删除删除 EA_TimeTaskMarkEA_TimeTaskMark 中过期标记中过期标记手动 保留 5 天周期性 保留 1 天日 保留 15 天月 保留 60 天3.2int3.2int CTimedTaskManager:GetTaskNodeCTimedTaskManager:GetTaskNode 手动任务执行 1 次后,从 EA_TimedTask
12、 中删除;在 Mark 库中记录;轨迹中不记录; 周期性定时任务,在 Mark 库中不记录;轨迹中记录; 其他:在 Mark 库中记录;轨迹中记录; = 如果 Mark 库中有同样帧请求,不再产生新的帧请求;应用需要补测; 仅对状态为“投入”的终端产生任务;4.应用应用4.14.1 实例化实例化CTimedTaskManager * m_TimedMgr=NULL; m_TimedMgr = new CTimedTaskManager(usr, pwd, srv); if (m_TimedMgr-GetOci() = NULL) SEND_CRT(“init timed task object
13、 error!“, 1); else SEND_CRT(“init timed task object ok!“, 1);4.24.2 程序启动时应用程序启动时应用Std:vector ChannelList;ChannelList.push_back(1); ChannelList.push_back(2); m_TimedMgr-ClearMark(ChannelList); 清除过时任务 std:vector timed_list; timed_list.clear();m_TimedMgr-GetTaskNode(timed_list, srvNo, ChannelList, 2);只
14、补齐上次退出时,还处于等待状态的任务;不产生新的任务; :insert_task(timed_list, 0);4.34.3 定时进入定时进入Std:vector ChannelList;ChannelList.push_back(1); ChannelList.push_back(2); std:vector timed_list; timed_list.clear();m_TimedMgr-GetTaskNode(timed_list, srvNo, ChannelList, 0);产生新的自动任务;不补齐通信失败、等待的任务 :insert_task(timed_list, 0);4.4
15、4.4 手动批量任务获取手动批量任务获取Std:vector ChannelList;ChannelList.push_back(1); ChannelList.push_back(2); std:vector timed_list; timed_list.clear();m_TimedMgr-GetTaskNode(timed_list, srvNo, ChannelList, 1);产生新的手动批量任务;不补齐通信失败、等待的任务 :insert_task(timed_list, 0);4.54.5 补测补测Std:vector ChannelList;ChannelList.push_b
16、ack(1); ChannelList.push_back(2); std:vector timed_list; timed_list.clear();m_TimedMgr-GetTaskNode(timed_list, srvNo, ChannelList, 3);补齐通信失败的任务,不产生新的任务; :insert_task(timed_list, 0);4.6 定时清除标记定时清除标记Std:vector ChannelList;ChannelList.push_back(1); ChannelList.push_back(2); m_TimedMgr-ClearMark(ChannelList); 清除过时任务4.74.7 应用层应