1.1. 背景
1. 余额获取
问题点1:在关账之前,在EAS页面看的科目余额,与直接读取数据库的余额表的科目余额可能不一致,原因是在这期间变化的余额只会在页面体现,只有等EAS的“轮询程序”更新了数据库的余额表,数据库的余额表的数据才能跟EAS页面看到的金额一致。而“轮询程序”更新的频率不定可能是1一分,也可能是1个小时,可能更长的时间。
2. 横表数据
横表的数据因为逻辑复杂,难于用一个SQL或者VIEW实现。需要用“程序”(可能是一个存储过程)来实现
3. 数据压力
关于HFM接口对金蝶EAS系统读取数据的压力评估
2.1. 业务需求
1、 科目余额(含辅助账)表数据样本,常用于资产负债表、利润表、部分附表
2、 全量凭证数据样本
3、 现金流量数据样本,用于现金流量表、内部现金流量表
4、 往来科目按照辅助账算账龄
5、 固定资产相关科目发生额
……
3.1. 合并报表核算取数接口方案
1. HFM系统调用EAS科目余额计算接口
2. EAS接收到调用请求,产生一个唯一请求号,并写入接口交互表
3. 接口交互表记录请求系统、任务处理时间、任务处理进度、各视图时效等等相关信息
4. 校验请求参数公司编号及期间
5. 创建科目余额计算异步任务
6. 返回HFM系统接收请求状态、请求号
7. 科目余额计算异步事务支持并发处理,预设最高10个后台事务同时执行,可配置
8. 异步事务启动执行,记录相关日志
9. 调用标准产品计算科目余额
10. 执行10个存储过程,更新到相应中间表,按公司编号及期间为一个版本
11. 每个存储过程处理,按公司及期间删除数据,再将查询视图的结果数据插入中间表,每个视图的删除及插入数据做为一个数据库事务处理。
12. 注:账龄表由于性能问题,特殊处理,将凭证分录明细数据写入ORACLE全局临时表CT_GL_TEMP_SubVoucherEntry,视图中关联临时表查询账龄。
13. 记录每个视图查询开始时间,相临两个视图开始时间差,即为视图耗时,可供性能分析
14. 调用HFM接口,通知科目余额计算结果
1. 部署于集成专用实例,不影响现有业务
实现方式:
在EAS的“性能隔离配置”指定10.0.4.67 server3负责余额计算执行任务。
按请求创建科目余额计算任务
Locale locale = SysContext.getSysContext().getLocale();
Object[] params = { ctx, requestNo, companyId, companyNumber, periodYear, periodMonth, tableIndex, isCalAcctBalance};
ICreateJobFacade iCreateJobFacade = CreateJobFacadeFactory.getLocalInstance(ctx);
StringBuffer sb = new StringBuffer();
sb.append("【科目余额计算处理】_" + requestNo);
// sb.append("【并发】_" + requestNo);
logger.error("***************************************ctx:" + ctx.toString());
String title = sb.toString();
JobConfig jobCfg = new JobConfig();
jobCfg.setTitle(title);
jobCfg.setTaskType(title);
jobCfg.setDescription(title);
jobCfg.setNeedCheckTaskType(false);
jobCfg.setMutex("AccountBalanceCal");
jobCfg.setNumber("INT_ACCOUNTBALANCECAL_0001");
推荐阅读