uo_bgtr_timer.sru 7.6 KB

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