uo_transmsg.sru 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. $PBExportHeader$uo_transmsg.sru
  2. forward
  3. global type uo_transmsg from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_transmsg from nonvisualobject autoinstantiate
  7. end type
  8. type variables
  9. Long uo_msgid
  10. end variables
  11. forward prototypes
  12. public function integer f_trycreate_sys_admsg (ref string arg_msg)
  13. public function integer f_redeal_admsg (long arg_msgid, string arg_redealemp, ref string arg_msg, boolean ifcommit)
  14. public function integer f_del_admsg (long arg_msgid, string arg_del_emp, ref string arg_msg, boolean ifcommit)
  15. public function integer f_deal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit)
  16. public function integer f_redeal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit)
  17. public function long f_create_admsg (long arg_sendempid, string arg_sendemp, string arg_objdpm, string arg_msgtitle, string arg_s_msg, ref string arg_msg, long arg_scid, string arg_billcode, boolean ifcommit)
  18. public function integer f_save_fj (long arg_msgid, string arg_fjname, blob arg_blob, decimal arg_filesize, integer arg_filetype, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg)
  20. end prototypes
  21. public function integer f_trycreate_sys_admsg (ref string arg_msg);
  22. /////f_trycreate_Sys_admsg(arg_msg)
  23. long cnt,rslt=1
  24. string createsql_string,t_str
  25. createsql_string="CREATE TABLE Sys_admsg (msgid int not null PRIMARY KEY, senddt datetime NOT NULL DEFAULT (getdate()) , sendemp char (10) NOT NULL DEFAULT ('') ,dealflag tinyint NOT NULL DEFAULT (0) ,dealdt datetime NULL,dealemp char(10) NOT NULL DEFAULT (''),redealdt datetime NULL,objdpm char(30) NOT NULL DEFAULT ('') ,s_msg varchar(254) NOT NULL DEFAULT ('') ,rel_code varchar (50) NOT NULL DEFAULT ('') )"
  26. t_str="select count(*) from Sys_admsg"
  27. Execute immediate :t_str;
  28. if sqlca.sqlcode<>0 then //不存在该表,建立
  29. Execute immediate :createsql_string ;
  30. if sqlca.sqlcode<>0 then
  31. arg_msg='建立表Sys_admsg失败>>'+sqlca.sqlerrtext
  32. rollback ;
  33. rslt=0
  34. goto ext
  35. else
  36. commit ;
  37. end if
  38. end if
  39. ///
  40. ext:
  41. return rslt
  42. end function
  43. public function integer f_redeal_admsg (long arg_msgid, string arg_redealemp, ref string arg_msg, boolean ifcommit);////f_redeal_admsg
  44. ////状态为已处理:1,才可以设为完成
  45. ////
  46. ////
  47. long rslt=1,dealflag
  48. //string sendemp=''
  49. //if arg_msgid<=0 then
  50. // arg_msg='非有效消息ID'
  51. // rslt=0
  52. // goto ext
  53. //end if
  54. //
  55. // SELECT sys_admsg.dealflag ,sendemp
  56. // INTO :dealflag ,:sendemp
  57. // FROM sys_admsg
  58. // WHERE sys_admsg.msgid =:arg_msgid ;
  59. //
  60. //if sqlca.sqlcode<>0 then
  61. // arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext
  62. // rslt=0
  63. // goto ext
  64. //end if
  65. //
  66. //if dealflag<>1 then
  67. // arg_msg='非[已处理]下不可以设为[完成]。'
  68. // rslt=0
  69. // goto ext
  70. //end if
  71. //if trim(arg_redealemp)<>trim(sendemp) and not sys_power_issuper then
  72. // arg_msg='非消息发起人或非超级用户不可以设为[完成]。'
  73. // rslt=0
  74. // goto ext
  75. //end if
  76. //
  77. // update sys_admsg
  78. // set dealflag=9,redealdt=getdate()
  79. // WHERE sys_admsg.msgid =:arg_msgid ;
  80. //
  81. //if sqlca.sqlcode<>0 then
  82. // arg_msg='更新消息状态(完成)失败>>'+sqlca.sqlerrtext
  83. // rollback;
  84. // rslt=0
  85. // goto ext
  86. //end if
  87. //
  88. //ext:
  89. //if ifCOMMIT and rslt=1 then
  90. // commit;
  91. //end if
  92. return rslt
  93. end function
  94. public function integer f_del_admsg (long arg_msgid, string arg_del_emp, ref string arg_msg, boolean ifcommit);//f_del_admsg(arg_msgid,arg_del_emp,arg_msg,ifcommit)
  95. //状态为完成:9,才可以删除
  96. //
  97. //
  98. Long rslt = 1,cnt = 0
  99. String sendemp
  100. IF arg_msgid <= 0 THEN
  101. arg_msg = '非有效消息ID'
  102. rslt = 0
  103. GOTO ext
  104. END IF
  105. SELECT count(*)
  106. INTO :cnt
  107. FROM sys_admsgmx
  108. Where sys_admsgmx.msgid = :arg_msgid AND sys_admsgmx.dealflag = 1 ;
  109. IF sqlca.SQLCode <> 0 THEN
  110. arg_msg = '查询消息ID失败>>'+sqlca.SQLErrText
  111. rslt = 0
  112. GOTO ext
  113. END IF
  114. IF cnt > 0 THEN
  115. arg_msg = '消息已有人确认不可以删除消息。'
  116. rslt = 0
  117. GOTO ext
  118. END IF
  119. DELETE FROM sys_admsg
  120. Where sys_admsg.msgid = :arg_msgid;
  121. IF sqlca.SQLCode <> 0 THEN
  122. arg_msg = '删除消息失败>>'+sqlca.SQLErrText
  123. ROLLBACK;
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. ext:
  128. IF ifCOMMIT AND rslt = 1 THEN
  129. COMMIT;
  130. END IF
  131. RETURN rslt
  132. end function
  133. public function integer f_deal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit);//f_deal_admsg
  134. //状态为待处理:0,才可以设为已处理
  135. //
  136. //
  137. long rslt=1,dealflag
  138. if arg_msgid<=0 then
  139. arg_msg='非有效消息ID'
  140. rslt=0
  141. goto ext
  142. end if
  143. SELECT sys_admsgmx.dealflag
  144. INTO :dealflag
  145. FROM sys_admsgmx
  146. WHERE sys_admsgmx.msgid =:arg_msgid
  147. and sys_admsgmx.empid =:arg_empid
  148. and sys_admsgmx.senddtint =:arg_sentdtint;
  149. if sqlca.sqlcode<>0 then
  150. arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext
  151. rslt=0
  152. goto ext
  153. end if
  154. if dealflag<>0 then
  155. arg_msg='非[待处理]下不可以设为[已处理]。'
  156. rslt=0
  157. goto ext
  158. end if
  159. update sys_admsgmx
  160. set dealflag=1,dealdt=getdate()
  161. WHERE sys_admsgmx.msgid =:arg_msgid
  162. and sys_admsgmx.empid =:arg_empid
  163. and sys_admsgmx.senddtint =:arg_sentdtint;
  164. if sqlca.sqlcode<>0 then
  165. arg_msg='更新消息状态(为已处理)失败>>'+sqlca.sqlerrtext
  166. rollback;
  167. rslt=0
  168. goto ext
  169. end if
  170. ext:
  171. if ifCOMMIT and rslt=1 then
  172. commit;
  173. end if
  174. return rslt
  175. end function
  176. public function integer f_redeal_admsg (long arg_msgid, long arg_sentdtint, long arg_empid, ref string arg_msg, boolean ifcommit);//f_deal_admsg
  177. //状态为待处理:0,才可以设为已处理
  178. //
  179. //
  180. long rslt=1,dealflag
  181. if arg_msgid<=0 then
  182. arg_msg='非有效消息ID'
  183. rslt=0
  184. goto ext
  185. end if
  186. SELECT sys_admsgmx.dealflag
  187. INTO :dealflag
  188. FROM sys_admsgmx
  189. WHERE sys_admsgmx.msgid =:arg_msgid
  190. and sys_admsgmx.empid =:arg_empid
  191. and sys_admsgmx.senddtint =:arg_sentdtint;
  192. if sqlca.sqlcode<>0 then
  193. arg_msg='查询消息ID失败>>'+sqlca.sqlerrtext
  194. rslt=0
  195. goto ext
  196. end if
  197. if dealflag<>0 then
  198. arg_msg='非[待处理]下不可以设为[已处理]。'
  199. rslt=0
  200. goto ext
  201. end if
  202. update sys_admsgmx
  203. set dealflag=1,dealdt=getdate()
  204. WHERE sys_admsgmx.msgid =:arg_msgid
  205. and sys_admsgmx.empid =:arg_empid
  206. and sys_admsgmx.senddtint =:arg_sentdtint;
  207. if sqlca.sqlcode<>0 then
  208. arg_msg='更新消息状态(为已处理)失败>>'+sqlca.sqlerrtext
  209. rollback;
  210. rslt=0
  211. goto ext
  212. end if
  213. ext:
  214. if ifCOMMIT and rslt=1 then
  215. commit;
  216. end if
  217. return rslt
  218. end function
  219. public function long f_create_admsg (long arg_sendempid, string arg_sendemp, string arg_objdpm, string arg_msgtitle, string arg_s_msg, ref string arg_msg, long arg_scid, string arg_billcode, boolean ifcommit);//f_create_admsg(arg_sendempid,arg_sendemp,arg_objdpm,arg_msgtitle,arg_s_msg,arg_msg,ifcommit)
  220. //新建
  221. //
  222. //
  223. Long rslt = 1
  224. Long msgid,ls_newid
  225. Long msgempid[]
  226. Long i,senddtint
  227. DateTime server_datetime
  228. uo_usergroup uo_ugp
  229. Boolean if_exist_super = FALSE
  230. Long arr_mxt
  231. uo_ugp = CREATE uo_usergroup
  232. SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  233. //取得系统时间,借用操作员表
  234. IF sqlca.SQLCode <> 0 THEN
  235. rslt = 0
  236. arG_MSG = "查询操作失败,日期 "
  237. GOTO ext
  238. END IF
  239. senddtint = Long(String(server_datetime,'yyyymmddhhmmss'))
  240. IF IsNull(arg_objdpm) THEN arg_objdpm = ''
  241. IF IsNull(arg_msgtitle) THEN arg_msgtitle = ''
  242. IF IsNull(arg_s_msg) THEN arg_s_msg = ''
  243. IF Trim(arg_objdpm) = '' THEN
  244. arG_MSG = '缺乏消息的发送对象'
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. uo_ugp.f_rst_msgemp_arr(sys_scid,arg_objdpm,msgempid[])
  249. IF UpperBound(msgempid) = 0 THEN
  250. arG_MSG = '缺乏消息的发送对象'
  251. rslt = 0
  252. GOTO ext
  253. ELSE
  254. IF arg_sendempid <> 0 THEN
  255. arr_mxt = UpperBound(msgempid)
  256. FOR i = 1 TO arr_mxt
  257. IF msgempid[i] = 0 THEN
  258. if_exist_super = TRUE
  259. EXIT
  260. END IF
  261. NEXT
  262. IF NOT if_exist_super THEN
  263. arr_mxt++
  264. msgempid[arr_mxt] = 0
  265. END IF
  266. END IF
  267. END IF
  268. IF Trim(arg_msgtitle) = '' THEN
  269. arG_MSG = '缺乏消息标题'
  270. rslt = 0
  271. GOTO ext
  272. END IF
  273. IF Trim(arg_s_msg) = '' THEN
  274. arG_MSG = '缺乏消息内容'
  275. rslt = 0
  276. GOTO ext
  277. END IF
  278. rslt = f_trycreate_Sys_admsg(arG_MSG)
  279. IF rslt = 0 THEN
  280. GOTO ext
  281. END IF
  282. ls_newid = f_sys_scidentity(sys_scid,"sys_admsg","msgid",arG_MSG,false,sqlca)
  283. IF ls_newid <= 0 THEN
  284. rslt = 0
  285. GOTO ext
  286. END IF
  287. msgid = ls_newid
  288. INSERT INTO sys_admsg
  289. ( msgid,
  290. senddt,
  291. sendemp,
  292. sendempid,
  293. objdpm,
  294. s_msgtitle,
  295. s_msg,
  296. scid,
  297. billcode)
  298. VALUES ( :msgid,
  299. getdate(),
  300. :arg_sendemp,
  301. :arg_sendempid,
  302. :arg_objdpm,
  303. :arg_msgtitle,
  304. :arg_s_msg,
  305. :arg_scid,
  306. :arg_billcode) ;
  307. IF sqlca.SQLCode <> 0 THEN
  308. arG_MSG = '新建消息失败>>'+sqlca.SQLErrText
  309. rslt = 0
  310. GOTO ext
  311. END IF
  312. FOR i = 1 TO UpperBound(msgempid)
  313. INSERT INTO sys_admsgmx
  314. ( msgid,
  315. empid,
  316. s_msgtitle,
  317. dealflag,
  318. s_msg,
  319. senddtint,
  320. scid,
  321. billcode)
  322. VALUES ( :msgid,
  323. :msgempid[i],
  324. :arg_msgtitle,
  325. 0,
  326. :arg_s_msg,
  327. :senddtint,
  328. :arg_scid,
  329. :arg_billcode) ;
  330. IF sqlca.SQLCode <> 0 THEN
  331. arG_MSG = '发送消息失败>>'+sqlca.SQLErrText
  332. rslt = 0
  333. GOTO ext
  334. END IF
  335. NEXT
  336. uo_msgid = ls_newid
  337. ext:
  338. IF rslt = 0 THEN
  339. ROLLBACK;
  340. ELSEIF ifCOMMIT AND rslt = 1 THEN
  341. COMMIT;
  342. END IF
  343. RETURN rslt
  344. end function
  345. public function integer f_save_fj (long arg_msgid, string arg_fjname, blob arg_blob, decimal arg_filesize, integer arg_filetype, ref string arg_msg, boolean arg_ifcommit);//保存附件
  346. Long rslt = 1
  347. Long ls_newid
  348. IF arg_msgid <= 0 THEN
  349. rslt = 0
  350. arg_msg = '保存附件失败(消息ID)'
  351. GOTO ext
  352. END IF
  353. IF IsNull(arg_fjname) OR arg_fjname = '' THEN
  354. rslt = 0
  355. arg_msg = '保存附件失败(附件名)'
  356. GOTO ext
  357. END IF
  358. ls_newid = f_sys_scidentity(0,"Sys_admsg_fj","fjid",arg_msg,FALSE,sqlca)
  359. IF ls_newid <= 0 THEN
  360. rslt = 0
  361. GOTO ext
  362. END IF
  363. INSERT INTO Sys_admsg_fj
  364. (fjid,
  365. msgid,
  366. filename,
  367. filesize,
  368. filetype)
  369. VALUES (
  370. :ls_newid,
  371. :arg_msgid,
  372. :arg_fjname,
  373. :arg_filesize,
  374. :arg_filetype);
  375. IF sqlca.SQLCode <> 0 THEN
  376. rslt = 0
  377. arg_msg = '因网络或其它原因保存附件失败>>'+sqlca.SQLErrText
  378. GOTO ext
  379. END IF
  380. commit;
  381. updateblob Sys_admsg_fj
  382. set fileblob = :arg_blob
  383. where fjid = :ls_newid;
  384. IF sqlca.SQLCode <> 0 THEN
  385. rslt = 0
  386. arg_msg = '因网络或其它原因保存附件失败>>'+sqlca.SQLErrText
  387. GOTO ext
  388. END IF
  389. ext:
  390. IF rslt = 0 THEN
  391. ROLLBACK;
  392. ELSEIF arg_ifcommit AND rslt = 1 THEN
  393. COMMIT;
  394. END IF
  395. RETURN rslt
  396. end function
  397. public function integer f_down_fj (long arg_fjid, string arg_fjname, ref blob arg_fjdata, ref string arg_msg);Long rslt = 1,cnt
  398. Blob ls_filedata
  399. IF arg_fjid <= 0 THEN
  400. rslt = 0
  401. arg_msg = '下载附件失败(错误附件ID)'
  402. GOTO ext
  403. END IF
  404. IF arg_fjname = '' THEN
  405. rslt = 0
  406. arg_msg = '下载附件失败(错误附件名)'
  407. GOTO ext
  408. END IF
  409. SELECT count(*)
  410. INTO :cnt
  411. FROM Sys_admsg_fj
  412. Where (fjid = :arg_fjid);
  413. IF sqlca.SQLCode <> 0 THEN
  414. rslt = 0
  415. arg_msg = '查询附件信息失败>>'+sqlca.SQLErrText
  416. GOTO ext
  417. END IF
  418. SELECTBLOB Fileblob
  419. INTO :ls_filedata
  420. FROM Sys_admsg_fj
  421. Where (fjid = :arg_fjid);
  422. IF sqlca.SQLCode <> 0 THEN
  423. rslt = 0
  424. arg_msg = '下载附件失败>>'+sqlca.SQLErrText
  425. GOTO ext
  426. END IF
  427. arg_fjdata = ls_filedata
  428. ext:
  429. RETURN rslt
  430. end function
  431. on uo_transmsg.create
  432. call super::create
  433. TriggerEvent( this, "constructor" )
  434. end on
  435. on uo_transmsg.destroy
  436. TriggerEvent( this, "destructor" )
  437. call super::destroy
  438. end on