123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- $PBExportHeader$uo_bgtr_timer.sru
- forward
- global type uo_bgtr_timer from nonvisualobject
- end type
- end forward
- global type uo_bgtr_timer from nonvisualobject
- end type
- global uo_bgtr_timer uo_bgtr_timer
- type variables
- long ID
- string name
- long TimerType
- string TimerParm
- long TaskType
- string TaskParm
- DateTime NextExecTime
- DateTime LastExecTime
- long IsRunning
- string opemp
- DateTime opdate
- string modemp
- DateTime moddate
- string c_emp
- DateTime c_date
- end variables
- forward prototypes
- public function integer uf_save (ref string arg_msg)
- public function integer uf_getinfo (long arg_id, ref string arg_msg)
- public function integer uf_del (long arg_id, ref string arg_msg)
- public function integer uf_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg)
- public function integer uf_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
- public function integer uf_trigger_timer (long arg_id, ref string arg_msg)
- end prototypes
- public function integer uf_save (ref string arg_msg);Int rslt = 1
- Long ll_newid
- IF ID = 0 THEN
- ll_newid = f_sys_scidentity(0,"bgtr_timer","ID", Ref arg_msg,True,id_sqlca)
- IF ll_newid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
- INSERT INTO bgtr_timer
- (ID, name, TimerType, TimerParm, TaskType, TaskParm, NextExecTime, IsRunning, opemp, opdate)
- Values (:ll_newid,:Name,:TimerType,:TimerParm,:TaskType,:TaskParm,:NextExecTime,:IsRunning,:publ_operator, GETDATE()) ;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入任务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ID = ll_newid
- ELSE
- UPDATE bgtr_timer
- SET name = :Name, TimerType = :TimerType, TimerParm = :TimerParm, TaskType = :TaskType, TaskParm = :TaskParm,
- NextExecTime = :NextExecTime, IsRunning = :IsRunning, modemp = :publ_operator, moddate = GETDATE()
- Where (ID = :ID);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新任务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSE
- COMMIT;
- END IF
- RETURN rslt
- end function
- public function integer uf_getinfo (long arg_id, ref string arg_msg);Int rslt = 1
- IF arg_id <= 0 THEN
- rslt = 0
- arg_msg = '无效任务ID'
- GOTO ext
- END IF
- Long ll_cnt
- SELECT COUNT(0) Into :ll_cnt From bgtr_timer Where ID = :arg_id;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '数据库连接失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_cnt = 0 THEN
- rslt = 0
- arg_msg = '任务不存在'
- GOTO ext
- END IF
- SELECT
- Name,
- TimerType,
- TimerParm,
- TaskType,
- TaskParm,
- NextExecTime,
- IsRunning,
- LastExecTime,
- opemp,
- opdate,
- modemp,
- moddate,
- c_emp,
- c_date
- Into
- :Name,
- :TimerType,
- :TimerParm,
- :TaskType,
- :TaskParm,
- :NextExecTime,
- :IsRunning,
- :LastExecTime,
- :opemp,
- :opdate,
- :modemp,
- :moddate,
- :c_emp,
- :c_date
- From bgtr_timer
- Where (ID = :arg_id);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询任务信息失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ID = arg_id
- ext:
- RETURN rslt
- end function
- public function integer uf_del (long arg_id, ref string arg_msg);Int rslt = 1
- IF arg_id <= 0 THEN
- rslt = 0
- arg_msg = '非法任务ID'
- GOTO ext
- END IF
- Long ll_cnt
- SELECT count(0) Into :ll_cnt From bgtr_timer Where id = :arg_id;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '数据库连接失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_cnt = 0 THEN
- rslt = 0
- arg_msg = '任务已经被删除,请刷新后再试'
- GOTO ext
- END IF
- DELETE From bgtr_timer Where id = :arg_id;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '删除任务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = '任务已经被删除,请刷新后再试'
- GOTO ext
- END IF
- ext:
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- END IF
- RETURN rslt
- end function
- public function integer uf_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg);Int rslt = 1
- Long ll_cnt
- ID = 0
- Name = '自动生成'
- TimerType = 1
- TimerParm = ''
- TaskType = 24
- TaskParm = 'mtrlid=' + String(arg_mtrlid) + ';fpgrade=' + String(arg_fpgrade)
- SELECT top 1 GETDATE()
- INTO :NextExecTime
- From u_user;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '获取系统时间失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IsRunning = 1
- SELECT COUNT(0)
- INTO :ll_cnt
- FROM bgtr_timer
- WHERE TimerType = :TimerType
- AND TimerParm = :TimerParm
- AND TaskType = :TaskType
- AND TaskParm = :TaskParm
- AND Name = :Name
- AND IsRunning = :IsRunning
- And NextExecTime <= :NextExecTime;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询未执行的相同任务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_cnt > 0 THEN // 不添加重复任务
- GOTO ext
- END IF
- IF uf_save(Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uf_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);Int rslt = 1
- Long ll_cnt
- ID = 0
- Name = '自动生成'
- TimerType = 1
- TimerParm = ''
- TaskType = 34
- TaskParm = 'scid=' + String(arg_scid) + ';taskid=' + String(arg_taskid) + ';printid=' + string(arg_printid)
- SELECT top 1 GETDATE()
- INTO :NextExecTime
- From u_user;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '获取系统时间失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IsRunning = 1
- SELECT COUNT(0)
- INTO :ll_cnt
- FROM bgtr_timer
- WHERE TimerType = :TimerType
- AND TimerParm = :TimerParm
- AND TaskType = :TaskType
- AND TaskParm = :TaskParm
- AND Name = :Name
- AND IsRunning = :IsRunning
- And NextExecTime <= :NextExecTime;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询未执行的相同任务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_cnt > 0 THEN // 不添加重复任务
- GOTO ext
- END IF
- IF uf_save(Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uf_trigger_timer (long arg_id, ref string arg_msg);Int rslt = 1
- DateTime dt_server
- uo_ljjob job
- SetNull(job)
- IF Not IsValid(uo_ljjob_creator_spi) THEN
- rslt = 0
- arg_msg = 'uo_ljjob_creator_spi未赋值'
- GOTO ext
- END IF
- SELECT top 1 GETDATE()
- INTO :dt_server
- From u_user;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询服务器间失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- DateTime dt_bdate
- SELECT bdate
- INTO :dt_bdate
- FROM bgtr_timer
- Where ID = :arg_id;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询任务最近执行时间失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF dt_bdate <= dt_server THEN
- UPDATE bgtr_timer
- SET block = 1,
- bdate = GETDATE()
- WHERE ID = :arg_id
- And (block = 0 Or GETDATE() > dateadd(ss, 10, bdate));
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '任务加锁失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- DO WHILE sqlca.SQLNRows = 0
- UPDATE bgtr_timer
- SET block = 1,
- bdate = GETDATE()
- WHERE ID = :arg_id
- And (block = 0 Or GETDATE() > dateadd(ss, 10, bdate));
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '任务加锁失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- LOOP
-
- IF uf_getinfo(arg_id, arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- job = uo_ljjob_creator_spi.create_job(TaskType)
- IF Not IsNull(job) THEN
- job.uf_setparm(TaskParm)
- job.uf_dojob(arg_msg)
- END IF
-
- UPDATE bgtr_timer
- SET block = 0
- Where ID = :arg_id;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '任务解锁失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- END IF
- ext:
- IF Not IsNull(job) THEN
- Destroy job
- END IF
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- END IF
- RETURN rslt
- end function
- on uo_bgtr_timer.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_bgtr_timer.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|