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

📄 thread_yxxx_view.pas

📁 delphi6.0电子寻更源程序,用来计算保安有无查抄
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit thread_yxxx_view;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RXCtrls, ExtCtrls, StdCtrls, Mask, ToolEdit, DBCtrls, Buttons, Grids,
  DBGrids, ComCtrls,db,bde;
type
  thread_yxxx = class(TThread)
  private
  first_da:tdatetime;
  last_da:tdatetime;
    { Private declarations }
  protected
     procedure Execute; override;
      procedure Exec;
     function    roundtime(time1,time2:tdatetime):integer;
     function	ttom(time1:tdatetime):Integer;
     function	dectime(time1,time2:tdatetime):integer;
     function	decdatetime(date1,time1,date2,time2:tdatetime):integer;
     procedure	DeleteSameRec;   //删除两点连续
    //procedure   checktime(worker,ln,sh:string;date1:tdatetime;bm1,bm2:tbookmark);//检查时间异常
     procedure selectoneday(date1:tdatetime);//选择单天的有效记录
     procedure checkrecord(date1:tdatetime;pen1,code1,linename1,shifts1:string);//选择漏点、乱序、完整、时间异常记录
     procedure save_ldjl(pen1,lx,linename1,shifts1,code1,lost_node,_pencode,_pstatu:string;date1,l_cf_ti:tdatetime);

 public
 constructor create(flag:boolean;begin_date:tdatetime;end_date:tdatetime);
  end;
 var
  //begindate,enddate:tdate;
  flag:boolean;
  l_com,n:integer;                      //点数
  l_begintime,l_endtime:Ttime;                  //上下班时间
  _linename,_shifts,_code:string;        //线路、班次、员工、日期
  l_pencode:string;//笔号
  _pdate:Tdatetime;
  _chkcycl,_dgpcxx,_dgpcsx,_ntime:integer;               //周期、下限、上限 、向前间隔
  check_times:integer;
implementation
 uses dm_yxxx_view_pas,FileCtrl,IniFiles;
{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure yxxx_view.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ yxxx_view }
constructor thread_yxxx.create(flag:boolean;begin_date:tdatetime;end_date:tdatetime);
begin
 first_da:=begin_date;
 last_da:=end_date;
 inherited create(flag);
  freeonterminate:=true;
 end;
 //procedure thread_yxxx.reset;  //formshow;
//begin
//end;
procedure thread_yxxx.Execute;
begin
Synchronize(exec);
end;
procedure thread_yxxx.Exec;
var _date:tdatetime;
_c,_n:string;
begin
dm_yxxx_view.Table1.Close;
dm_yxxx_view.Table1.open;
with dm_yxxx_view do
begin
q_fpxl.close;
q_fpxl.open;
end;
while not dm_yxxx_view.Table1.Eof do
begin
dm_yxxx_view.Table1.delete;
end;
dm_yxxx_view.q_yxxx_fl.close;
dm_yxxx_view.q_yxxx_fl.open;
while not dm_yxxx_view.q_yxxx_fl.Eof do
begin
dm_yxxx_view.q_yxxx_fl.delete ;
end ;
dm_yxxx_view.q_xxwh.close;
dm_yxxx_view. q_xxwh.open;
dm_yxxx_view.T_yxxx_view.Close;
dm_yxxx_view.T_yxxx_view.open;
{with dm_yxxx_view.q_xxlr do
begin
close;
open;
  while not eof   do
   begin
   _c:=fieldbyname('workercode').asstring;
   _n:=fieldbyname('node').asstring;
    if not dm_yxxx_view.q_xxwh.Locate('code;node',vararrayOf([_c,_n]),[loCaseInsensitive]) then
      begin
      showmessage('巡更員或巡更點在此前沒有完善維護,可能造成資料查詢有誤!');
      break;
      //exit;
      end;
    next;
   end;
end; }
//statusbar.Panels[0].Text :='正在查询数据,请等待......';
_date:=first_da;
while _date<=last_da do
 begin
  selectoneday(_date);
  _date:=_date+1;
  end;
 with dm_yxxx_view.q_yxxx do
 begin
 close;
 sql.clear;
 sql.add('select * from yxxx');
 sql.add('order by yxxx.pdate,yxxx.pencode,yxxx.workercode,yxxx.linename,yxxx.shifts,yxxx.ptime,yxxx.lseq ') ;
 open;
 end;
with dm_yxxx_view do
begin
q_ldxx_view.close;
q_wzxx_view.close;
q_lxxx_view.close;
q_sjyc.close;
q_line.close;
q_point.close;
q_shifts.close;
q_worker.close;
q_yxxx.close;
q_ldxx_view.open;
q_wzxx_view.open;
q_lxxx_view.open;
q_sjyc.open;
q_line.open;
q_point.open;
q_shifts.open;
q_worker.open;
q_yxxx.open;
end;
end;
procedure thread_yxxx.DeleteSameRec;       //删除两点连续现象
var
  l_date,l_time,L_d2,l_t2:tdatetime;
  l_node,l_workercode,l_statu,l_n2,l_w2,l_ps2:string;
  click_time:integer;
  inif:tinifile;
  filename,temp,ch_time:string;
begin
filename:=ExtractFiledir(APPLICATION.EXENAME)+'\'+ExtractFilename(APPLICATION.EXENAME);//+'\hdxgxt.ini';
if not fileexists(filename) then
filename:=ExtractFileDir(APPLICATION.EXENAME)+'hdxgxt.ini'
else filename:=extractfiledir(application.exename)+'\hdxgxt.ini';
inif:=TInifile.Create(filename);
ch_time:=inif.readstring('time','value',temp);
if ch_time='' then 
click_time:=5
else
click_time:=strtoint(ch_time);
with   dm_yxxx_view.t_yxxx_view  do
  begin
  	if isempty	then	exit;
 	  first;
 		L_DATE:=FieldByName('pdate').asdatetime;
		L_TIME:=FieldByName('ptime').asdatetime;
		L_NODE:=FieldByName('node').asstring;
		//L_WORKerCODE:=FieldByName('workercode').asstring;
                //L_STATU:=FieldByName('pstatu').value;
                 NEXT;
		WHILE NOT EOF	do
    begin
	 		L_D2:=FieldByName('pdate').asdatetime;
			L_T2:=FieldByName('ptime').asdatetime;
			L_N2:=FieldByName('node').asstring;
		       //	L_W2:=FieldByName('workercode').asstring;
                       // l_ps2:=FieldByName('pstatu').value;
    	IF (L_NODE=l_n2) then
      begin
      	IF decdatetime(l_D2,l_t2,L_Date,l_time)<=click_time	then
        begin
        //showmessage(inttostr(click_time));
        	prior;
                DELETE;
        end;
      end;
	 		L_DATE:=FieldByName('pdate').asdatetime;
			L_TIME:=FieldByName('ptime').asdatetime;
			L_NODE:=FieldByName('node').asstring;
		      //	L_WORKerCODE:=FieldByName('workercode').asstring;
     // L_STATU:=FieldByName('pstatu').value;
      NEXT;
		END;
  end;
//  if not Table1.isempty	then  T_Patrol.batchmove(Table1,batAppend);
end;
procedure thread_yxxx.selectoneday(date1:tdatetime);  //选择一天的巡更记录
var
  l_tx:integer;
  L_DATE,L_TIME:TDATETIME;
  l_lseq:integer;
  l_d1,l_t1,L_d2,l_t2:tdatetime;
  l_node,l_workercode,l_statu,l_n2,l_w2,l_ps2:string;//检点巡更点连续显现
begin  // 选择一天的巡更情况
  _pdate:=date1;
  with dm_yxxx_view.q_pen do
     begin
     close;
     sql.clear;
     sql.add('select distinct pencode from patrolrec');
     open;
     first;
     end;
  while not dm_yxxx_view.q_pen.Eof do
     begin//按棒号分类
     l_pencode:=dm_yxxx_view.q_pen.fieldbyname('pencode').asstring;
     with dm_yxxx_view.q_fpxl do
     begin   //0.02
     first;
     while not eof do
       begin //查找人员、线路、班次
        with dm_yxxx_view.T_yxxx_view   do
          begin
          //close;
          //open;
          first;
          while not eof do
          begin
          delete;
          END;
          END;
        _code:=fieldbyname('code').asstring;
        _linename:=fieldbyname('linename').asstring;
        _shifts:=fieldbyname('shift').asstring;
        with dm_yxxx_view.q_ysxx do  //可以建立存储过程,每次循环都打开
         begin   //生成有效信息   临时
         close;
         sql.clear;
         sql.add(' SELECT patrolrec.dataseq,patrolrec.workercode,patrolrec.pencode,patrolrec.pdate,');
         sql.add(' patrolrec.ptime,patrolrec.pstatu,patrolrec.node,point.linename,point.name,');
         sql.add(' point.nodeplace,point.lseq,point.ntime,worker.name as workername,worker.number,shiftrule.shifts,');
         sql.add(' shiftrule.firstp,shiftrule.lastp,shiftrule.times,shiftrule.chkcycl,shiftrule.dgpcsx,shiftrule.dgpcxx ');
         sql.add(' from patrolrec inner join ');
         sql.add(' point on patrolrec.node=point.node  inner join ');
         sql.add(' worker on patrolrec.workercode=worker.code inner join ');
         sql.add(' fpxl on (patrolrec.workercode=fpxl.code) and  (point.linename=fpxl.linename) inner join   ');
         sql.add(' shiftrule on fpxl.shift=shiftrule.shifts');
         //sql.add(' where patrolrec.pdate>= '''+datetostr(_pdate-1)+'''');
         //sql.add(' and   patrolrec.pdate<='''+datetostr(_pdate+1)+'''');
         sql.add(' where patrolrec.pdate>=:_pdate1');
         sql.add(' and   patrolrec.pdate<=:_pdate2');
         sql.add(' and   point.linename='''+_linename+'''');
         sql.add(' and   shiftrule.shifts='''+_shifts+'''');
         sql.add(' and   patrolrec.workercode='''+_code+'''');
         sql.add(' and   patrolrec.pencode='''+l_pencode+'''');
         sql.add('order by patrolrec.pdate,patrolrec.workercode,point.linename,shiftrule.shifts,patrolrec.ptime') ;
         //showmessage(sql.text);
         parambyname('_pdate1').asdatetime:=_pdate-1 ;
         parambyname('_pdate2').asdatetime:=_pdate+1;
         {parambyname('_linename').asstring:=_linename;
         parambyname('_workercode').asstring:=_code;
         parambyname('_shifts').asstring:=_shifts;}
         //sql.add(order by )
         open;
         first;
           if recordcount >0 then
           begin //0.01
          // dm_yxxx_view.t_yxxx_view.BatchMove(dm_yxxx_view.q_ysxx,batAppend);
           while not eof do
              begin       //建立临时
                with  dm_yxxx_vieW.T_YXXX_VIEW  do //t_yxxxx_view----临时表temp;q_yxxx(table1)-----yxxx.db
                 begin
                   append;
                   edit;
                   fieldbyname('linename').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('linename').asstring;
                   fieldbyname('pencode').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('pencode').asstring;
                   fieldbyname('node').asstring:=dm_yxxx_view.q_ysxx.fieldbyname('node').asstring;

⌨️ 快捷键说明

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