uo_bgtr_timer.sru 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. $PBExportHeader$uo_bgtr_timer.sru
  2. forward
  3. global type uo_bgtr_timer from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_bgtr_timer from nonvisualobject
  7. end type
  8. global uo_bgtr_timer uo_bgtr_timer
  9. type variables
  10. long ID
  11. string name
  12. long TimerType
  13. string TimerParm
  14. long TaskType
  15. string TaskParm
  16. DateTime NextExecTime
  17. DateTime LastExecTime
  18. long IsRunning
  19. string opemp
  20. DateTime opdate
  21. string modemp
  22. DateTime moddate
  23. string c_emp
  24. DateTime c_date
  25. end variables
  26. forward prototypes
  27. public function integer uf_save (ref string arg_msg)
  28. public function integer uf_getinfo (long arg_id, ref string arg_msg)
  29. public function integer uf_del (long arg_id, ref string arg_msg)
  30. public function integer uf_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg)
  31. public function integer uf_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
  32. public function integer uf_trigger_timer (long arg_id, ref string arg_msg)
  33. end prototypes
  34. public function integer uf_save (ref string arg_msg);Int rslt = 1
  35. Long ll_newid
  36. IF ID = 0 THEN
  37. ll_newid = f_sys_scidentity(0,"bgtr_timer","ID", Ref arg_msg,True,id_sqlca)
  38. IF ll_newid <= 0 THEN
  39. rslt = 0
  40. GOTO ext
  41. END IF
  42. INSERT INTO bgtr_timer
  43. (ID, name, TimerType, TimerParm, TaskType, TaskParm, NextExecTime, IsRunning, opemp, opdate)
  44. Values (:ll_newid,:Name,:TimerType,:TimerParm,:TaskType,:TaskParm,:NextExecTime,:IsRunning,:publ_operator, GETDATE()) ;
  45. IF sqlca.SQLCode <> 0 THEN
  46. rslt = 0
  47. arg_msg = '插入任务失败,' + sqlca.SQLErrText
  48. GOTO ext
  49. END IF
  50. ID = ll_newid
  51. ELSE
  52. UPDATE bgtr_timer
  53. SET name = :Name, TimerType = :TimerType, TimerParm = :TimerParm, TaskType = :TaskType, TaskParm = :TaskParm,
  54. NextExecTime = :NextExecTime, IsRunning = :IsRunning, modemp = :publ_operator, moddate = GETDATE()
  55. Where (ID = :ID);
  56. IF sqlca.SQLCode <> 0 THEN
  57. rslt = 0
  58. arg_msg = '更新任务失败,' + sqlca.SQLErrText
  59. GOTO ext
  60. END IF
  61. END IF
  62. ext:
  63. IF rslt = 0 THEN
  64. ROLLBACK;
  65. ELSE
  66. COMMIT;
  67. END IF
  68. RETURN rslt
  69. end function
  70. public function integer uf_getinfo (long arg_id, ref string arg_msg);Int rslt = 1
  71. IF arg_id <= 0 THEN
  72. rslt = 0
  73. arg_msg = '无效任务ID'
  74. GOTO ext
  75. END IF
  76. Long ll_cnt
  77. SELECT COUNT(0) Into :ll_cnt From bgtr_timer Where ID = :arg_id;
  78. IF sqlca.SQLCode <> 0 THEN
  79. rslt = 0
  80. arg_msg = '数据库连接失败,' + sqlca.SQLErrText
  81. GOTO ext
  82. END IF
  83. IF ll_cnt = 0 THEN
  84. rslt = 0
  85. arg_msg = '任务不存在'
  86. GOTO ext
  87. END IF
  88. SELECT
  89. Name,
  90. TimerType,
  91. TimerParm,
  92. TaskType,
  93. TaskParm,
  94. NextExecTime,
  95. IsRunning,
  96. LastExecTime,
  97. opemp,
  98. opdate,
  99. modemp,
  100. moddate,
  101. c_emp,
  102. c_date
  103. Into
  104. :Name,
  105. :TimerType,
  106. :TimerParm,
  107. :TaskType,
  108. :TaskParm,
  109. :NextExecTime,
  110. :IsRunning,
  111. :LastExecTime,
  112. :opemp,
  113. :opdate,
  114. :modemp,
  115. :moddate,
  116. :c_emp,
  117. :c_date
  118. From bgtr_timer
  119. Where (ID = :arg_id);
  120. IF sqlca.SQLCode <> 0 THEN
  121. rslt = 0
  122. arg_msg = '查询任务信息失败,' + sqlca.SQLErrText
  123. GOTO ext
  124. END IF
  125. ID = arg_id
  126. ext:
  127. RETURN rslt
  128. end function
  129. public function integer uf_del (long arg_id, ref string arg_msg);Int rslt = 1
  130. IF arg_id <= 0 THEN
  131. rslt = 0
  132. arg_msg = '非法任务ID'
  133. GOTO ext
  134. END IF
  135. Long ll_cnt
  136. SELECT count(0) Into :ll_cnt From bgtr_timer Where id = :arg_id;
  137. IF sqlca.SQLCode <> 0 THEN
  138. rslt = 0
  139. arg_msg = '数据库连接失败,' + sqlca.SQLErrText
  140. GOTO ext
  141. END IF
  142. IF ll_cnt = 0 THEN
  143. rslt = 0
  144. arg_msg = '任务已经被删除,请刷新后再试'
  145. GOTO ext
  146. END IF
  147. DELETE From bgtr_timer Where id = :arg_id;
  148. IF sqlca.SQLCode <> 0 THEN
  149. rslt = 0
  150. arg_msg = '删除任务失败,' + sqlca.SQLErrText
  151. GOTO ext
  152. END IF
  153. IF sqlca.SQLNRows = 0 THEN
  154. rslt = 0
  155. arg_msg = '任务已经被删除,请刷新后再试'
  156. GOTO ext
  157. END IF
  158. ext:
  159. IF rslt = 1 THEN
  160. COMMIT;
  161. ELSE
  162. ROLLBACK;
  163. END IF
  164. RETURN rslt
  165. end function
  166. public function integer uf_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg);Int rslt = 1
  167. Long ll_cnt
  168. ID = 0
  169. Name = '自动生成'
  170. TimerType = 1
  171. TimerParm = ''
  172. TaskType = 24
  173. TaskParm = 'mtrlid=' + String(arg_mtrlid) + ';fpgrade=' + String(arg_fpgrade)
  174. SELECT top 1 GETDATE()
  175. INTO :NextExecTime
  176. From u_user;
  177. IF sqlca.SQLCode <> 0 THEN
  178. rslt = 0
  179. arg_msg = '获取系统时间失败,' + sqlca.SQLErrText
  180. GOTO ext
  181. END IF
  182. IsRunning = 1
  183. SELECT COUNT(0)
  184. INTO :ll_cnt
  185. FROM bgtr_timer
  186. WHERE TimerType = :TimerType
  187. AND TimerParm = :TimerParm
  188. AND TaskType = :TaskType
  189. AND TaskParm = :TaskParm
  190. AND Name = :Name
  191. AND IsRunning = :IsRunning
  192. And NextExecTime <= :NextExecTime;
  193. IF sqlca.SQLCode <> 0 THEN
  194. rslt = 0
  195. arg_msg = '查询未执行的相同任务失败,' + sqlca.SQLErrText
  196. GOTO ext
  197. END IF
  198. IF ll_cnt > 0 THEN // 不添加重复任务
  199. GOTO ext
  200. END IF
  201. IF uf_save(Ref arg_msg) <> 1 THEN
  202. rslt = 0
  203. GOTO ext
  204. END IF
  205. ext:
  206. RETURN rslt
  207. end function
  208. public function integer uf_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);Int rslt = 1
  209. Long ll_cnt
  210. ID = 0
  211. Name = '自动生成'
  212. TimerType = 1
  213. TimerParm = ''
  214. TaskType = 34
  215. TaskParm = 'scid=' + String(arg_scid) + ';taskid=' + String(arg_taskid) + ';printid=' + string(arg_printid)
  216. SELECT top 1 GETDATE()
  217. INTO :NextExecTime
  218. From u_user;
  219. IF sqlca.SQLCode <> 0 THEN
  220. rslt = 0
  221. arg_msg = '获取系统时间失败,' + sqlca.SQLErrText
  222. GOTO ext
  223. END IF
  224. IsRunning = 1
  225. SELECT COUNT(0)
  226. INTO :ll_cnt
  227. FROM bgtr_timer
  228. WHERE TimerType = :TimerType
  229. AND TimerParm = :TimerParm
  230. AND TaskType = :TaskType
  231. AND TaskParm = :TaskParm
  232. AND Name = :Name
  233. AND IsRunning = :IsRunning
  234. And NextExecTime <= :NextExecTime;
  235. IF sqlca.SQLCode <> 0 THEN
  236. rslt = 0
  237. arg_msg = '查询未执行的相同任务失败,' + sqlca.SQLErrText
  238. GOTO ext
  239. END IF
  240. IF ll_cnt > 0 THEN // 不添加重复任务
  241. GOTO ext
  242. END IF
  243. IF uf_save(Ref arg_msg) <> 1 THEN
  244. rslt = 0
  245. GOTO ext
  246. END IF
  247. ext:
  248. RETURN rslt
  249. end function
  250. public function integer uf_trigger_timer (long arg_id, ref string arg_msg);Int rslt = 1
  251. DateTime dt_server
  252. uo_ljjob job
  253. SetNull(job)
  254. IF Not IsValid(uo_ljjob_creator_spi) THEN
  255. rslt = 0
  256. arg_msg = 'uo_ljjob_creator_spi未赋值'
  257. GOTO ext
  258. END IF
  259. SELECT top 1 GETDATE()
  260. INTO :dt_server
  261. From u_user;
  262. IF sqlca.SQLCode <> 0 THEN
  263. rslt = 0
  264. arg_msg = '查询服务器间失败,' + sqlca.SQLErrText
  265. GOTO ext
  266. END IF
  267. DateTime dt_bdate
  268. SELECT bdate
  269. INTO :dt_bdate
  270. FROM bgtr_timer
  271. Where ID = :arg_id;
  272. IF sqlca.SQLCode <> 0 THEN
  273. rslt = 0
  274. arg_msg = '查询任务最近执行时间失败,' + sqlca.SQLErrText
  275. GOTO ext
  276. END IF
  277. IF dt_bdate <= dt_server THEN
  278. UPDATE bgtr_timer
  279. SET block = 1,
  280. bdate = GETDATE()
  281. WHERE ID = :arg_id
  282. And (block = 0 Or GETDATE() > dateadd(ss, 10, bdate));
  283. IF sqlca.SQLCode <> 0 THEN
  284. rslt = 0
  285. arg_msg = '任务加锁失败,' + sqlca.SQLErrText
  286. GOTO ext
  287. END IF
  288. DO WHILE sqlca.SQLNRows = 0
  289. UPDATE bgtr_timer
  290. SET block = 1,
  291. bdate = GETDATE()
  292. WHERE ID = :arg_id
  293. And (block = 0 Or GETDATE() > dateadd(ss, 10, bdate));
  294. IF sqlca.SQLCode <> 0 THEN
  295. rslt = 0
  296. arg_msg = '任务加锁失败,' + sqlca.SQLErrText
  297. GOTO ext
  298. END IF
  299. LOOP
  300. IF uf_getinfo(arg_id, arg_msg) <> 1 THEN
  301. rslt = 0
  302. GOTO ext
  303. END IF
  304. job = uo_ljjob_creator_spi.create_job(TaskType)
  305. IF Not IsNull(job) THEN
  306. job.uf_setparm(TaskParm)
  307. job.uf_dojob(arg_msg)
  308. END IF
  309. UPDATE bgtr_timer
  310. SET block = 0
  311. Where ID = :arg_id;
  312. IF sqlca.SQLCode <> 0 THEN
  313. rslt = 0
  314. arg_msg = '任务解锁失败,' + sqlca.SQLErrText
  315. GOTO ext
  316. END IF
  317. END IF
  318. ext:
  319. IF Not IsNull(job) THEN
  320. Destroy job
  321. END IF
  322. IF rslt = 1 THEN
  323. COMMIT;
  324. ELSE
  325. ROLLBACK;
  326. END IF
  327. RETURN rslt
  328. end function
  329. on uo_bgtr_timer.create
  330. call super::create
  331. TriggerEvent( this, "constructor" )
  332. end on
  333. on uo_bgtr_timer.destroy
  334. TriggerEvent( this, "destructor" )
  335. call super::destroy
  336. end on