⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eastriver.pas

📁 上传个考勤系统,希望别人也能用.该代码只能算初级的东东,软件代码复用性不高,重复代码比较多.唯一感觉有点取鉴的可能就是端口和dll的连接,还有线程的使用,本想改一改,但是手头没有考勤机了,对应考勤机是
💻 PAS
📖 第 1 页 / 共 5 页
字号:
//参数说明:
// hPort        : 端口句柄, 需要联机
// RingTimes    : 打铃时间数组, 最少需要32个单元
// ArraySize    : Delphi不需要,如果是VB或是C++需要传数组大小参数
//返回值:
// 0            : 失败
// 1-32         : 有效打铃时间数量

//	    设置设备打铃时间 (最多可以设置32次打铃)
function SetRing(hPort: THandle; hour: Integer; minute: Integer; second: Integer; ringTimeLen: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
//		hour, minute, second  :  为打铃的起始时间, 数值分别为 : 0-23, 0-59, 0-59
//		ringTimeLen			  :  为打铃的持续时间, 数值为 1-60 秒
//返回值:
// True         : 成功
// False        : 失败

//	  	读刷卡记录(ALL)
function ReadRecord(hPort: THandle; data: PChar; timeString: PChar; var mark: Char; FirstRecord: Boolean): Boolean; stdcall; external EASTRIVER_API
//本函数为通用读记录函数, 可以用其他特定功能函数代替
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 读回的卡号字符串, 缓冲区需大於20字节长度
// timeString   : 读回的14位刷卡时间字符串, 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
// mark         : 读卡机标识字符.
// FirstRecord  : 是否只读取最顶端记录,否则删除最顶端记录,读取下一条记录
//返回值:
// True         : 成功
// False        : 失败

//      读刷卡记录(^2G)
function ReadStandardRecord(hPort: THandle; Data: PChar; timeString: PChar; var mark: Char; var flag: Integer; var cardTimes: Integer; var cardGroup: Integer): Boolean; stdcall; external EASTRIVER_API
//使用函数前需确保设备卡的存储长度为16
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 读回的卡号字符串, 缓冲区需大於20字节长度
// timeString   : 读回的14位刷卡时间字符串, 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
// mark         : 读卡机标识字符.
// flag         : 存储卡的结果
//    flag = 0   : 表示为正常卡
//    flag.0 = 1 : 表示为非法门禁卡
//    flag.1 = 1 : 表示为非法考勤卡
//    flag.2 = 1 : 表示为黑名单卡
// cardTimes    : 发卡次数, 0-15
// cardGroup    : 卡的组别, 0-255
//返回值:
// True         : 成功
// False        : 失败

//      读取刷卡记录(ALL)
function ReadClockData(hPort: THandle; CardNo: PChar; var SignTime: Double; var mark: Char; FirstRecord: Boolean): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// CardNo       : 返回记录卡号
// SignTime     : 返回记录刷卡时间, Delphi的TDateTime类型,VB的Date类型
// mark         : 返回记录标识, 范围:'0'-'9', 'A'-'F'
// FirstRecord  : 是否只读取最顶端记录,否则删除最顶端记录,读取下一条记录
//返回值:
// True         : 成功
// False        : 失败

//      读取记录(以文本格式1G)
function ReadRecordText(hPort: THandle; data: PChar; FirstRecord: Boolean): Integer; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 记录文本, 格式根据具体机型而定,一般是:yy年MM月dd日hh时nn分mark标识CardNo卡号
//返回值:
// -1           : 错误
// 1-30         : 成功


//批读记录结构
type
  PICRecord=^TICRecord;
  TICRecord=packed record
    Card: array[0..19] of char; // 卡号字符串
    timeString: array[0..19] of char; // 14位刷卡时间字符串, 格式为yyyymmddhhnnss
    EmpId: array[0..09] of char;
    mark: Integer; // 读卡机标识字符
    flag: Integer; // 存储卡的结果
//            flag = 0   : 表示为正常卡
//            flag.0 = 1 : 表示为非法门禁卡
//            flag.1 = 1 : 表示为非法考勤卡
//            flag.2 = 1 : 表示为黑名单卡
    cardTimes: Integer; // 发卡次数, 0-15
    consume  : WORD;    // 消费额
    balance  : WORD;    // 消费后余额
  end;

//      批量读数据(^2G)
function BatchReadRecord(hPort: THandle; var Records: array of TICRecord{; ArraySize: Integer}): Integer; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// Records      : 返回记录数组, 最少需要16个单元
// ArraySize    : Delphi不需要,如果是VB或是C++需要传数组大小参数
//返回值:
// -1           : 错误
// 0            : 记录已经读完
// 1-16         : 正确读取的记录条数

//      读上一次调用BatchReadRecord所读的记录(^3G)
function BatchReadPrevRecord(hPort: THandle; var Records: array of TICRecord{; ArraySize: Integer}): Integer; stdcall; external EASTRIVER_API
//同BatchReadRecord()

//		  删除所有的存储考勤卡记录
function ClearAllReadCard(hPort: THandle): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
//返回值:
// True         : 删除成功
// False        : 删除失败

const
  BytesOfRecord=32; //每记录字节数
  RecordsOfFrame=400; //每帧记录数

type
  //ER-980门禁记录结构
  P980ReadData=^T980ReadData;
  T980ReadData=packed record
    Verify_Error : Boolean;	              //此记录校验是否正确, 由用户处理,
                                          //如果记录校验错误且需继续读返回一条记录则需重置为False
    CardNo       : array[0..19] of char;	//卡号(20个字节,以0结束字符串)
    TimeString   : array[0..19] of char;  //时间(20个字节,以0结束字符串)
    flag         : Integer;               //打卡结果
//          flag = 0     : 表示正常卡
//          flag.0 = 1   : 非法门禁卡
//          flag.1 = 1   : 表示为非法考勤卡
//          flag.2 = 1   : 黑名单卡
//          flag.12=11   : 非打卡时段存储卡
//          flag.3 = 1   : 未用(置0)
//          flag.45      : 0-3 对应1-4号读卡器
//          flag.6-7     : Mark 标识
    Group        : Integer;               //分组
    Times        : Integer;               //发卡次数
    Record_Total : Integer;               //采集数据的总记录数
    Record_Index : Integer;               //当前记录是第几条记录
  end;

  //ER-690消费记录结构(大小和ER-980记录一致)
  P690ReadData=^T690ReadData;
  T690ReadData=packed record
    Verify_Error : Boolean;	              //此记录校验是否正确, 由用户处理,
                                          //如果记录校验错误且需继续读返回一条记录则需重置为False
    CardNo       : array[0..19] of char;	//卡号(20个字节,以0结束字符串)
    TimeString   : array[0..19] of char;  //时间(20个字节,以0结束字符串)
    flag         : Integer;               //打卡结果
//          flag = 0     : 表示正常记录
//          flag = 1     : 补贴充值记录
//          flag = 2     : 出纳机充值记录
//          flag = 3     : 退还了误收金额的消费记录
//          flag = 7     : 表示此记录的卡片在写入金额时由于过早离开了感应区,有可能金额没有正常写入
//          新增标志
//          flag = 5     :透支消费 
    Consume      : Integer;                  //消费金额,单位角
    Balance      : Integer;                  //消费后余额,单位角
    Times        : Integer;               //充值次数
    Record_Total : Integer;               //采集数据的总记录数
    Record_Index : Integer;               //当前记录是第几条记录

    //新增成员
    Clock_ver    : array[0..1] of char;  //消费记录版本号
    Clock_ID     : Integer;              //机号
    POS_Sequ     : Integer;              //POS交易流水号
    Card_Sequ    : Integer;              //卡交易流水号
    Op_CardNo    : array[0..19] of Char; //POS机操作员卡号
  end;

  PReadData=P690ReadData;//按需要更改声明
  TReadData=T690ReadData;//按需要更改声明

  PArrayReadData=^TArrayReadData;
  TArrayReadData=array[0..RecordsOfFrame] of TReadData;

//      数据处理回调函数
TDataProcess = function(lpData: Pointer; lpReadData: PReadData): Boolean;stdcall;
// lpData       : 自定义变量, 对应ReadAllRecord()的第二个参数
// lpReadData   : 记录结构指针
//返回值:
//如果需要返回下一条记录则返回True, 如果需要中止数据读取可返回False,

TTimeLapse = procedure(lpData: Pointer; microsecond: Integer);stdcall;
//延时回调
//参数说明:
// lpData       : 自定义变量, 对应ReadAllRecord()的第二个参数
// microsecond  : 如果使用此函数则应在microsecond 微秒内按时返回
//无返回值


//      按帧(一帧400条)读取机具所有记录
function ReadAllRecord(hPort: THandle; lpData: Pointer; DataProcess: TDataProcess; Wait:TTimeLapse=nil): Integer;stdcall; external EASTRIVER_API
//读所有记录调用
//参数说明:
// lpData       : 指向欲传入回调函数DataProcess()的参数指针作为DataProcess()的第一个参数如果不用可设为NULL
// DataProcess  : 指向结构 TReadData 的指针, 数据块包含一条记录
// Wait         : 延时回调过程指针, 不用可设为NULL
//返回值:
// 0            : 机具内记录已空(无记录)
// >0           : 成功读取记录数
// -1,-2        : 串行通信错误
// -3           : 命令字异或校验错误
// -4           : 用户中止或接收未完成
// -5           : 不支持的命令,需要改用其它命令采集数据
// -8,-9        : 资源分配错误

type
  TReadProgressProc=function(Position, AMax: Integer; lpReadData: PReadData; reserved: Integer): Boolean; stdcall;

//      一次性读取所有记录到指定的文件
function ReadAllRecordAsFile(hPort: THandle; clock_id: Integer; FileName: PChar; hWndParent: HWND; bShowProg: Boolean; Progress: TReadProgressProc): Integer; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// clock_id     : 机号
// FileName     : 指定文本文件名, 如果不存在, 将会自动创建,
//                如果存在, 新收的记录将会追加在文件末尾
//                如果文件名为空,则不保存文件
// 每条记录一行,格式如下:
// 卡号<TAB>日期时间<TAB>机号<TAB>记录标识<TAB>状态(FLAG)<TAB>门号
// 其中<TAB>为制表符(ASCII值:#9)
// hWndParent   : 进程对话框的父窗口句柄,可设为0
// bShowProg    : 是否显示接收进程对话框
// Progress     : 进程回调,不用可以设为NULL
//返回值:
// 同 ReadAllRecord

{考勤机控制类}
















{黑白名单类}
//      批量读取黑白名单进程回调
type TProgressProc=function(TypeId, PageNo, Percent: Integer): Boolean; stdcall;
//参数说明:
// TypeId       : 名单类型, 0: 门禁通行卡, 1:白名单, 2: 黑名单
// PageNo       : 页号
// Percent      : 已完成百分比, 如 80=80%
//返回值:
// True         : 成功
// False        : 失败

//		  读机具已经下载的允许考勤卡(白名单)数量
function ReadSavedAllowedClockerCardNumber(hPort: THandle; var data: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 返回已经下载的白名单数量
//返回值:
// True         : 成功
// False        : 失败

//		  读机具已经下载的黑名单卡数量
function ReadSavedBlackCardNumber(hPort: THandle; var data: Integer): Boolean;stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 返回已经下载的黑名单数量
//返回值:
// True         : 成功
// False        : 失败

//		  读机具已经下载的门禁通行卡数量
function ReadSavedLockerPassCardNumber(hPort: THandle; var data: Integer): Boolean; stdcall; external EASTRIVER_API
//参数说明:
// hPort        : 端口句柄, 需要联机
// data         : 返回已经下载的门禁通行卡数量
//返回值:
// True         : 成功
// False        : 失败

//广播下载卡名单
function BroadCastAllCard(hPort, WinHnd:THandle; Kind: Integer; Action: Integer;Card,EmpID,EmpName,PassTime:String; var Count: Integer; Delay:Integer=80): Boolean; stdcall; external EASTRIVER_API
//功能:增加所有的卡到列表
//参数:hPort 联机的端口句柄
//      WinHand 已下载总数发送消息的窗口句柄 WM_USER+$100;wParam即是总数
//      Kind:=0清空各种名单,在添加名单之前请先用此参数进行调用一次,否则会造成重复
//           =1门禁白名单,除了EmpName为空外,通行时间则是所有的,如0000013008301030 表示0点至1点30及8点30至10点30两个时间段
//           =2考勤白名单,其余要输入,但PassTime可为空
//           =3机具黑名单, 除了Card输入外,其余为空
//      Action=0表示增加名单列表
//            =1表示开始单机分页下载
//            =2表示开始广播下载方式
//       Count 表示返回成功下载的卡个数
//获取总数的示例

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -