【开发相关】教师上课记录以及考勤同步相关问题
1 不要使用TD_OA.user的表,必须使用td_edu.user表.
2 如果要修改td_edu.user的结构,不要直接在phpmyadmin里面修改,而是找到Interface/EDU/database_setting.php 这个文件,修改td_edu.user视图的创建SQL语句,记住这个文件里面,有四个地方涉及到了创建user视图的语句,都要同步处理. 修改成功以后,需要您在IE下面打开这个文件,就可以完成执行操作. 如果直接在phpmyadmin里面修改结构,则会被这个里面的重建语句所覆盖,导致创建无效.
3 定时任务:每隔N分钟执行同步考勤记录语句 使用地址:/general/EDU/Interface/EDU/KAOQINJI_ALL.php 这个地址在通达OA的office_task里面不能带?参数,所以?action=DataDeal的参数值要写在这个文件里面.请参考厦门工商旅游的考勤接口文件和这个文件.
4 定时任务:每天夜里执行一次初始化的地址:/general/EDU/Interface/EDU/edu_teacherkaoqinmingxi_automake_exec_all_user.php 执行时间较长
5 下面是如何调试定时任务部分的代码:
5.1 还有就是,你在OA的系统管理->定时任务,手动执行一下,看看能不能成功,如果提示成功,则向下一步进行,如果失败,则看看有没有SQL语句错误之类.
5.2 如果执行成功,则要看一下实际上课记录的部分是否正常,主要是看逻辑部分是否正常.
5.3 如果程序正常,逻辑上面也没有问题,则把office_task服务重新启动(只重新启动服务,不是服务器),然后等几分钟以后,看看间隔执行的定时任务是否成功.
6 定时任务里面,手动初始化老师考勤记录失败:这个程序时间会很久,但不会失败.如果出现失败,则需要看office_task这个日志里面输出的内容,就可以定位到是哪的问题,如果有SQL语句错误,也会在这个日志文件里面显示.这个日志文件里面进入到远程桌面服务器里面才能查看到.
7 涉及到定时任务的程序里面,关于使用require_once或include_once之类的加载函数,不能使用相对路径,都要使用获取到绝对路径进行加载才可以.
如:
$SCRIPT_FILENAME = $_SERVER['SCRIPT_FILENAME'];
$SCRIPT_FILENAME_ARRAY = explode('webroot',$SCRIPT_FILENAME);
$_SERVER['DOCUMENT_ROOT'] = $SCRIPT_FILENAME_ARRAY[0];
$_SERVER['DOCUMENT_ROOT'] = $_SERVER['DOCUMENT_ROOT']."webroot";
//print $_SERVER['DOCUMENT_ROOT'];
require_once($_SERVER['DOCUMENT_ROOT'].'/general/EDU/Interface/EDU/lib.inc.php');
//以下是在IE里面可以执行成功,但在office_task里面会执行失败的代码
require_once('../../Interface/EDU/lib.inc.php');
8 同步规则设定:要兼容考勤机数据断网的情况.
这个中间主要涉及两种同步考勤记录的算法 ,第一种是原来的利用ID主键或是时间来判断倒序判断,得到记录以后直接插入的算法. 第二种是指定日期范围,得到这个范围之内的所有记录,然后再根据每条记录的情况,如果目前库存在则不插入记录,如果目前库不存在,则插入记录.
第一种同步算法可以应付大多数的情况,但有一种缺陷无法避免,主要是在某些特殊情况下面,有些考勤机会有脱网,当再次联网的时候,考勤机上传数据到考勤机服务器,这个情况下面,利用时间来判断的机制,则会把这些记录漏掉,目前像新开普,以及主流的考勤机都有此问题,所以后续部署的同步算法应该使用第二种算法.
第二种算法参考三明林业或工商旅游的程序写法.
0个回复
- 暂无回复