uo_oa_doc.sru 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170
  1. $PBExportHeader$uo_oa_doc.sru
  2. forward
  3. global type uo_oa_doc from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_oa_doc from nonvisualobject
  7. end type
  8. global uo_oa_doc uo_oa_doc
  9. type variables
  10. Transaction ins_tran
  11. long ins_docid
  12. Boolean it_newbegin = FALSE //新建标志
  13. Boolean it_updatebegin = FALSE //修改标志
  14. end variables
  15. forward prototypes
  16. public function long del_doc (long arg_docid, ref string arg_msg, boolean ifcommit)
  17. public function integer save_doc (s_oadoc arg_doc, ref string arg_msg, ref long arg_docid, boolean arg_ifcommit)
  18. public function integer opt_audit (long arg_powerid, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg)
  19. public function integer p_reverse (long arg_docid, boolean arg_ifcommit, ref string arg_msg)
  20. public function integer p_init (long arg_docid, boolean arg_ifcommit, ref string arg_msg)
  21. public function integer p_stop (long arg_docid, boolean arg_ifcommit, ref string arg_msg)
  22. public function integer p_continue (long arg_docid, boolean arg_ifcommit, ref string arg_msg)
  23. public function integer p_check_if_oaflow (long arg_scid, long arg_billid, long arg_powerid, ref string arg_msg)
  24. public function integer p_create_oa_flow (long arg_powerid, long arg_scid, long arg_billid, string arg_billcode, string arg_relcode, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg)
  25. public function integer uof_top1_sort_id (long arg_docid, ref string arg_ref_sort, ref long arg_ref_flowid, ref string arg_msg)
  26. public function integer p_to_nextstep (long arg_docid, long arg_sort, boolean arg_ifcommit, ref string arg_msg)
  27. public function integer p_add_oa_flow (long arg_docid, long arg_empid, long arg_rowid, long arg_colomnid, long arg_flowsort, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg)
  28. public function integer uof_doc_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer uof_get_flow_annex (long arg_flowid, ref s_oa_doc_annex arg_s_oda[])
  30. public function integer set_read (long arg_docid, long arg_empid, long arg_read_flag)
  31. public function integer opt_caudit (long arg_powerid, long arg_type, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg, string arg_empcontent)
  32. public function integer p_gree (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp)
  33. public function integer p_oppose (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp)
  34. public function integer uof_doc_stepdel (long arg_docid, long arg_flowsort, integer arg_deltype, ref string arg_msg, boolean arg_ifcommit)
  35. public function integer uof_urge (long arg_docid, string arg_urgemsg, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  36. public function integer uof_disagree_back (long arg_docid, string arg_disagree_msg, boolean arg_ifcommit, ref string arg_msg)
  37. public function integer uof_clean_step (long arg_docid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit)
  38. public function integer uof_update_item (long arg_docid, long arg_printid, string arg_itemvalue, long arg_relid, ref string arg_msg, boolean arg_ifcommit)
  39. public function integer uof_update_relqty (long arg_docid, decimal arg_relqty, ref string arg_msg, boolean arg_ifcommit)
  40. end prototypes
  41. public function long del_doc (long arg_docid, ref string arg_msg, boolean ifcommit);Long rslt = 1,cnt = 0
  42. Long ll_docflag
  43. If arg_docid <= 0 Then
  44. arg_msg = '非有效公文ID'
  45. rslt = 0
  46. Goto ext
  47. End If
  48. Select docflag Into :ll_docflag
  49. From oa_doc
  50. Where docid = :arg_docid Using ins_tran;
  51. If ins_tran.SQLCode <> 0 Then
  52. arg_msg = '查询公文信息失败>>'+ins_tran.SQLErrText
  53. rslt = 0
  54. Goto ext
  55. End If
  56. If ll_docflag <> 0 Then
  57. rslt = 0
  58. arg_msg = '公文只有在草稿状态下才能被删除,请核对'
  59. Goto ext
  60. End If
  61. Delete From oa_doc_flow
  62. Where (oa_doc_flow.docid = :arg_docid) Using ins_tran;
  63. If ins_tran.SQLCode <> 0 Then
  64. arg_msg = '删除公文流转失败>>'+ins_tran.SQLErrText
  65. rslt = 0
  66. Goto ext
  67. End If
  68. Delete From oa_doc_step
  69. Where (oa_doc_step.docid = :arg_docid) Using ins_tran;
  70. If ins_tran.SQLCode <> 0 Then
  71. arg_msg = '删除公文流转失败>>'+ins_tran.SQLErrText
  72. rslt = 0
  73. Goto ext
  74. End If
  75. Delete From oa_doc_stepemp
  76. Where oa_doc_stepemp.docID = :arg_docid
  77. Using ins_tran;
  78. If ins_tran.SQLCode <> 0 Then
  79. arg_msg = '删除公文流程相关人员失败'+ins_tran.SQLErrText
  80. rslt = 0
  81. Goto ext
  82. End If
  83. Delete From oa_doc_item
  84. Where oa_doc_item.docID = :arg_docid
  85. Using ins_tran;
  86. If ins_tran.SQLCode <> 0 Then
  87. arg_msg = '删除公文自定义字段失败'+ins_tran.SQLErrText
  88. rslt = 0
  89. Goto ext
  90. End If
  91. Delete From oa_doc_copy_emp
  92. Where oa_doc_copy_emp.docID = :arg_docid
  93. Using ins_tran;
  94. If ins_tran.SQLCode <> 0 Then
  95. arg_msg = '删除抄送对象失败'+ins_tran.SQLErrText
  96. rslt = 0
  97. Goto ext
  98. End If
  99. Delete From oa_doc_annex
  100. Where oa_doc_annex.docID = :arg_docid
  101. Using ins_tran;
  102. If ins_tran.SQLCode <> 0 Then
  103. arg_msg = '删除公文失败(附件表)'+ins_tran.SQLErrText
  104. rslt = 0
  105. Goto ext
  106. End If
  107. Delete From oa_doc
  108. Where oa_doc.docID = :arg_docid
  109. Using ins_tran;
  110. If ins_tran.SQLCode <> 0 Then
  111. arg_msg = '删除公文失败'+ins_tran.SQLErrText
  112. rslt = 0
  113. Goto ext
  114. End If
  115. ext:
  116. If ifcommit And rslt = 1 Then
  117. Commit Using ins_tran;
  118. ElseIf rslt = 0 Then
  119. Rollback Using ins_tran;
  120. End If
  121. Return rslt
  122. end function
  123. public function integer save_doc (s_oadoc arg_doc, ref string arg_msg, ref long arg_docid, boolean arg_ifcommit);Long rslt = 1
  124. Long ls_newid
  125. DateTime server_datetime
  126. String doccode
  127. Long ls_newdocid = 0
  128. Long ls_empid,ls_rowid,ls_columnid
  129. String ls_empcode
  130. Long li_flowid,ll_i
  131. SELECT TOP 1 getdate() INTO :server_datetime FROM u_user
  132. Using ins_tran;
  133. //取得系统时间,借用操作员表
  134. IF ins_tran.SQLCode <> 0 THEN
  135. rslt = 0
  136. arG_MSG = "查询操作失败,日期 "
  137. GOTO ext
  138. END IF
  139. IF IsNull(arg_doc.doctitle) THEN arg_doc.doctitle = ''
  140. IF IsNull(arg_doc.doccontent) THEN arg_doc.doccontent = ''
  141. IF Trim(arg_doc.doctitle) = '' THEN
  142. arG_MSG = '缺乏公文标题'
  143. rslt = 0
  144. GOTO ext
  145. END IF
  146. IF Trim(arg_doc.doccontent) = '' THEN
  147. arG_MSG = '缺乏公文内容'
  148. rslt = 0
  149. GOTO ext
  150. END IF
  151. SELECT empid INTO :ls_empid
  152. FROM u_user
  153. Where username = :publ_operator Using ins_tran;
  154. IF ins_tran.SQLCode <> 0 THEN
  155. arG_MSG = '查询用户ID失败>>'+ins_tran.SQLErrText
  156. rslt = 0
  157. GOTO ext
  158. END IF
  159. IF ls_empid < 0 THEN
  160. rslt = 0
  161. arG_MSG = '错误用户ID'
  162. GOTO ext
  163. END IF
  164. IF arg_doc.docid = 0 THEN //新建
  165. ls_newid = f_sys_scidentity(sys_scid,"oa_doc","docID",arG_MSG,True,id_sqlca)
  166. doccode = getid(sys_scid,'GW',Date(server_datetime),False,ins_tran)
  167. IF doccode = "err" THEN
  168. doccode = ''
  169. rslt = 0
  170. arG_MSG = "无法获取公文编号"+"~n"+sqlca.SQLErrText
  171. GOTO ext
  172. END IF
  173. INSERT INTO oa_doc
  174. (docID,
  175. Doccode,
  176. Doctitle,
  177. Doccontent,
  178. Doccontent_ori,
  179. dscrp,
  180. docflag,
  181. dtype,
  182. billcode,
  183. Opemp,
  184. Opdt,
  185. rowid,
  186. SCID,
  187. BILLID,
  188. flowid,
  189. powerid,
  190. empid,
  191. timedscrp,
  192. specialdscrp,
  193. relqty,
  194. reldemocode,
  195. reldemoid
  196. )
  197. VALUES(:ls_newid,
  198. :doccode,
  199. :arg_doc.doctitle,
  200. :arg_doc.doccontent,
  201. :arg_doc.doccontent,
  202. :arg_doc.dscrp,
  203. :arg_doc.docstatus,
  204. :arg_doc.dtype,
  205. :arg_doc.billcode,
  206. :publ_operator,
  207. :server_datetime,
  208. :arg_doc.rowid,
  209. :arg_doc.SCID,
  210. :arg_doc.BILLID,
  211. :arg_doc.flowid,
  212. :arg_doc.powerid,
  213. :ls_empid,
  214. :arg_doc.timedscrp,
  215. :arg_doc.specialdscrp,
  216. :arg_doc.relqty,
  217. :arg_doc.reldemocode,
  218. :arg_doc.reldemoid)Using ins_tran;
  219. IF ins_tran.SQLCode <> 0 THEN
  220. arG_MSG = '发布公告失败1>>'+ins_tran.SQLErrText
  221. rslt = 0
  222. GOTO ext
  223. END IF
  224. IF arg_doc.dtype = 0 THEN
  225. //dyy 2014-12-10 修改为外部传入数据保存. (由于公文模板引用生成的公文流程可能跟定义的审批流程不一致)
  226. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_step)
  227. INSERT INTO oa_doc_step
  228. (docid,
  229. flowsort,
  230. flowstepname,
  231. flowempstr,
  232. flowinfo,
  233. limithour,
  234. ifnecessary,
  235. ifjoin,
  236. ifmod_relqty,
  237. ifmodfj)
  238. VALUES
  239. (:ls_newid,
  240. :arg_doc.arg_s_step[ll_i].flowsort,
  241. :arg_doc.arg_s_step[ll_i].flowstepname,
  242. :arg_doc.arg_s_step[ll_i].flowempstr,
  243. :arg_doc.arg_s_step[ll_i].flowinfo,
  244. :arg_doc.arg_s_step[ll_i].limithour,
  245. :arg_doc.arg_s_step[ll_i].ifnecessary,
  246. :arg_doc.arg_s_step[ll_i].ifjoin,
  247. :arg_doc.arg_s_step[ll_i].ifmod_relqty,
  248. :arg_doc.arg_s_step[ll_i].ifmodfj) Using ins_tran;
  249. IF ins_tran.SQLCode <> 0 THEN
  250. arG_MSG = '发布公告失败2,插入审核步骤失败>>'+ins_tran.SQLErrText
  251. rslt = 0
  252. GOTO ext
  253. END IF
  254. NEXT
  255. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_stepemp)
  256. INSERT INTO oa_doc_stepemp
  257. (docid,
  258. flowsort,
  259. empid)
  260. VALUES
  261. (:ls_newid,
  262. :arg_doc.arg_s_stepemp[ll_i].flowsort,
  263. :arg_doc.arg_s_stepemp[ll_i].empid) Using ins_tran;
  264. IF ins_tran.SQLCode <> 0 THEN
  265. arG_MSG = '发布公告失败3,插入审核步骤人员信息失败>>'+ins_tran.SQLErrText
  266. rslt = 0
  267. GOTO ext
  268. END IF
  269. NEXT
  270. ELSE
  271. //插入流程步骤
  272. //如果有发起者处理的,插入发起者的empid
  273. INSERT INTO oa_doc_step
  274. (docid,
  275. flowsort,
  276. flowstepname,
  277. flowempstr,
  278. flowinfo,
  279. limithour,
  280. ifnecessary,
  281. ifjoin)
  282. SELECT :ls_newid,
  283. flowsort,
  284. flowstepname,
  285. case when ifopflag = 0 then flowempstr else rtrim(flowempstr) + ',' + :publ_operator END,
  286. flowinfo,
  287. limithour,
  288. ifnecessary,
  289. ifjoin
  290. FROM oa_flowdef_step
  291. Where flowid = :arg_doc.flowid Using ins_tran;
  292. IF ins_tran.SQLCode <> 0 THEN
  293. arG_MSG = '发布公告失败2>>'+ins_tran.SQLErrText
  294. rslt = 0
  295. GOTO ext
  296. END IF
  297. FOR ll_i = 1 To UpperBound(arg_doc.flowsort_arr)
  298. UPDATE oa_doc_step
  299. SET flowinfo = :arg_doc.flowinfo_arr[ll_i],
  300. limithour = :arg_doc.limithour_arr[ll_i]
  301. WHERE docid = :ls_newid
  302. And flowsort = :arg_doc.flowsort_arr[ll_i] Using ins_tran;
  303. IF ins_tran.SQLCode <> 0 THEN
  304. arG_MSG = '更新审批描述失败>>'+ins_tran.SQLErrText
  305. rslt = 0
  306. GOTO ext
  307. END IF
  308. NEXT
  309. // case when ifopflag = 0 then flowempstr else
  310. // case when CHARINDEX(:publ_operator, flowempstr) > 0 then flowempstr else
  311. // case when rtrim(flowempstr) = '' then :publ_operator else rtrim(flowempstr) + ',' + :publ_operator END END END
  312. //插入常规的用户empid
  313. INSERT INTO oa_doc_stepemp
  314. (docid, flowsort, empid)
  315. SELECT :ls_newid,oa_flowdef_stepemp.flowsort,oa_flowdef_stepemp.empid
  316. FROM oa_flowdef_stepemp INNER join oa_flowdef_step on
  317. oa_flowdef_stepemp.flowid = oa_flowdef_step.flowid AND
  318. oa_flowdef_stepemp.flowsort = oa_flowdef_step.flowsort
  319. WHERE oa_flowdef_stepemp.flowid = :arg_doc.flowid
  320. And oa_flowdef_step.ifopflag = 0 Using ins_tran;
  321. IF ins_tran.SQLCode <> 0 THEN
  322. arG_MSG = '发布公告失败3>>'+ins_tran.SQLErrText
  323. rslt = 0
  324. GOTO ext
  325. END IF
  326. //插入发起者的empid
  327. INSERT INTO oa_doc_stepemp
  328. (docid, flowsort, empid)
  329. SELECT :ls_newid AS docid,
  330. flowsort,
  331. :ls_empid AS empid
  332. FROM oa_flowdef_step
  333. WHERE flowid = :arg_doc.flowid
  334. And (ifopflag = 1) Using ins_tran;
  335. IF ins_tran.SQLCode <> 0 THEN
  336. arG_MSG = '发布公告失败4>>'+ins_tran.SQLErrText
  337. rslt = 0
  338. GOTO ext
  339. END IF
  340. // And (CHARINDEX( :publ_operator, flowempstr) = 0)
  341. END IF
  342. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_item)
  343. INSERT INTO oa_doc_item
  344. (docid,
  345. printid,
  346. itemname,
  347. itemtype,
  348. itemvalue,
  349. flowsort,
  350. ifrequired,
  351. relid,
  352. dscrp_ch,
  353. modemp,
  354. moddate,
  355. cell,
  356. ifread)
  357. VALUES (:ls_newid,
  358. :arg_doc.arg_s_item[ll_i].printid,
  359. :arg_doc.arg_s_item[ll_i].itemname,
  360. :arg_doc.arg_s_item[ll_i].itemtype,
  361. :arg_doc.arg_s_item[ll_i].itemvalue,
  362. :arg_doc.arg_s_item[ll_i].flowsort,
  363. :arg_doc.arg_s_item[ll_i].ifrequired,
  364. :arg_doc.arg_s_item[ll_i].relid,
  365. :arg_doc.arg_s_item[ll_i].dscrp_ch,
  366. :arg_doc.arg_s_item[ll_i].modemp,
  367. :arg_doc.arg_s_item[ll_i].moddate,
  368. :arg_doc.arg_s_item[ll_i].cell,
  369. :arg_doc.arg_s_item[ll_i].ifread) Using ins_tran;
  370. IF ins_tran.SQLCode <> 0 THEN
  371. arG_MSG = '发布公告失败,插入自定义字段>>'+ins_tran.SQLErrText
  372. rslt = 0
  373. GOTO ext
  374. END IF
  375. NEXT
  376. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_copy_emp)
  377. INSERT INTO oa_doc_copy_emp
  378. (docid,
  379. empid)
  380. VALUES (:ls_newid,
  381. :arg_doc.arg_s_copy_emp[ll_i].empid) Using ins_tran;
  382. IF ins_tran.SQLCode <> 0 THEN
  383. arG_MSG = '发布公告失败,插入抄送对象字段>>'+ins_tran.SQLErrText
  384. rslt = 0
  385. GOTO ext
  386. END IF
  387. NEXT
  388. arg_docid = ls_newid
  389. ELSE //更新
  390. UPDATE oa_doc
  391. SET Doctitle = :arg_doc.doctitle,
  392. Doccontent = :arg_doc.doccontent,
  393. dscrp = :arg_doc.dscrp,
  394. dtype = :arg_doc.dtype,
  395. billcode = :arg_doc.billcode,
  396. mdfemp = :publ_operator,
  397. mdfdt = :server_datetime,
  398. rowid = :arg_doc.rowid,
  399. SCID = :ARG_doc.SCID,
  400. BILLID = :ARG_DOC.BILLID,
  401. flowid = :arg_doc.flowid,
  402. timedscrp = :arg_doc.timedscrp,
  403. specialdscrp = :arg_doc.specialdscrp,
  404. relqty = :arg_doc.relqty,
  405. reldemocode = :arg_doc.reldemocode,
  406. reldemoid = :arg_doc.reldemoid
  407. WHERE docID = :arg_doc.docid
  408. Using ins_tran;
  409. IF ins_tran.SQLCode <> 0 THEN
  410. arG_MSG = '更新公告失败>>'+ins_tran.SQLErrText
  411. rslt = 0
  412. GOTO ext
  413. END IF
  414. IF arg_doc.dtype = 0 THEN
  415. DELETE FROM oa_doc_step
  416. Where (oa_doc_step.docid = :arg_doc.docid) Using ins_tran;
  417. IF ins_tran.SQLCode <> 0 THEN
  418. arG_MSG = '删除公文流转失败>>'+ins_tran.SQLErrText
  419. rslt = 0
  420. GOTO ext
  421. END IF
  422. DELETE FROM oa_doc_stepemp
  423. WHERE oa_doc_stepemp.docID = :arg_doc.docid
  424. Using ins_tran;
  425. IF ins_tran.SQLCode <> 0 THEN
  426. arG_MSG = '删除公文流程相关人员失败'+ins_tran.SQLErrText
  427. rslt = 0
  428. GOTO ext
  429. END IF
  430. DELETE FROM oa_doc_item
  431. WHERE oa_doc_item.docID = :arg_doc.docid
  432. Using ins_tran;
  433. IF ins_tran.SQLCode <> 0 THEN
  434. arG_MSG = '删除公文自定义字段失败'+ins_tran.SQLErrText
  435. rslt = 0
  436. GOTO ext
  437. END IF
  438. DELETE FROM oa_doc_copy_emp
  439. WHERE docid = :arg_doc.docid
  440. Using ins_tran;
  441. IF ins_tran.SQLCode <> 0 THEN
  442. arG_MSG = '删除抄送对象失败'+ins_tran.SQLErrText
  443. rslt = 0
  444. GOTO ext
  445. END IF
  446. //dyy 2014-12-10 修改为外部传入数据保存. (由于公文模板引用生成的公文流程可能跟定义的审批流程不一致)
  447. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_step)
  448. INSERT INTO oa_doc_step
  449. (docid,
  450. flowsort,
  451. flowstepname,
  452. flowempstr,
  453. flowinfo,
  454. limithour,
  455. ifnecessary,
  456. ifjoin,
  457. ifmod_relqty,
  458. ifmodfj)
  459. VALUES
  460. (:arg_doc.docid,
  461. :arg_doc.arg_s_step[ll_i].flowsort,
  462. :arg_doc.arg_s_step[ll_i].flowstepname,
  463. :arg_doc.arg_s_step[ll_i].flowempstr,
  464. :arg_doc.arg_s_step[ll_i].flowinfo,
  465. :arg_doc.arg_s_step[ll_i].limithour,
  466. :arg_doc.arg_s_step[ll_i].ifnecessary,
  467. :arg_doc.arg_s_step[ll_i].ifjoin,
  468. :arg_doc.arg_s_step[ll_i].ifmod_relqty,
  469. :arg_doc.arg_s_step[ll_i].ifmodfj) Using ins_tran;
  470. IF ins_tran.SQLCode <> 0 THEN
  471. arG_MSG = '发布公告失败2,插入审核步骤失败>>'+ins_tran.SQLErrText
  472. rslt = 0
  473. GOTO ext
  474. END IF
  475. NEXT
  476. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_stepemp)
  477. INSERT INTO oa_doc_stepemp
  478. (docid,
  479. flowsort,
  480. empid)
  481. VALUES
  482. (:arg_doc.docid,
  483. :arg_doc.arg_s_stepemp[ll_i].flowsort,
  484. :arg_doc.arg_s_stepemp[ll_i].empid) Using ins_tran;
  485. IF ins_tran.SQLCode <> 0 THEN
  486. arG_MSG = '发布公告失败3,插入审核步骤人员信息失败>>'+ins_tran.SQLErrText
  487. rslt = 0
  488. GOTO ext
  489. END IF
  490. NEXT
  491. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_item)
  492. INSERT INTO oa_doc_item
  493. (docid,
  494. printid,
  495. itemname,
  496. itemtype,
  497. itemvalue,
  498. flowsort,
  499. ifrequired,
  500. relid,
  501. dscrp_ch,
  502. modemp,
  503. moddate,
  504. cell,
  505. ifread)
  506. VALUES (:arg_doc.docid,
  507. :arg_doc.arg_s_item[ll_i].printid,
  508. :arg_doc.arg_s_item[ll_i].itemname,
  509. :arg_doc.arg_s_item[ll_i].itemtype,
  510. :arg_doc.arg_s_item[ll_i].itemvalue,
  511. :arg_doc.arg_s_item[ll_i].flowsort,
  512. :arg_doc.arg_s_item[ll_i].ifrequired,
  513. :arg_doc.arg_s_item[ll_i].relid,
  514. :arg_doc.arg_s_item[ll_i].dscrp_ch,
  515. :arg_doc.arg_s_item[ll_i].modemp,
  516. :arg_doc.arg_s_item[ll_i].moddate,
  517. :arg_doc.arg_s_item[ll_i].cell,
  518. :arg_doc.arg_s_item[ll_i].ifread) Using ins_tran;
  519. IF ins_tran.SQLCode <> 0 THEN
  520. arG_MSG = '发布公告失败,插入自定义字段>>'+ins_tran.SQLErrText
  521. rslt = 0
  522. GOTO ext
  523. END IF
  524. NEXT
  525. FOR ll_i = 1 To UpperBound(arg_doc.arg_s_copy_emp)
  526. INSERT INTO oa_doc_copy_emp
  527. (docid,
  528. empid)
  529. VALUES (:arg_doc.docid,
  530. :arg_doc.arg_s_copy_emp[ll_i].empid) Using ins_tran;
  531. IF ins_tran.SQLCode <> 0 THEN
  532. arG_MSG = '发布公告失败,插入抄送对象字段>>'+ins_tran.SQLErrText
  533. rslt = 0
  534. GOTO ext
  535. END IF
  536. NEXT
  537. END IF
  538. arg_docid = arg_doc.docid
  539. END IF
  540. ext:
  541. IF rslt = 0 THEN
  542. ROLLBACK Using ins_tran;
  543. ELSEIF arg_ifcommit And rslt = 1 THEN
  544. COMMIT Using ins_tran;
  545. END IF
  546. RETURN rslt
  547. end function
  548. public function integer opt_audit (long arg_powerid, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  549. If arg_billid <= 0 Then
  550. rslt = 0
  551. arg_msg = '错误的单据唯一码'
  552. Goto ext
  553. End If
  554. Choose Case arg_powerid
  555. Case 6,1324 //'销售订单审核'
  556. uo_saletask obj_saletask
  557. obj_saletask = Create uo_saletask
  558. obj_saletask.commit_transaction = sqlca
  559. obj_saletask.audit_buildtype = 1
  560. If obj_saletask.propermit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then
  561. rslt = 0
  562. Goto ext
  563. End If
  564. Destroy obj_saletask
  565. Case 94,1277,4299 //'采购订单'
  566. uo_buytask uo_buy
  567. uo_buy = Create uo_buytask
  568. uo_buy.commit_transaction = sqlca
  569. uo_buy.audit_buildtype = 1
  570. If uo_buy.firstpermit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then
  571. rslt = 0
  572. Goto ext
  573. End If
  574. Destroy uo_buy
  575. Case 36,1138
  576. uo_order_ml uo_order
  577. uo_order = Create uo_order_ml
  578. uo_order.audit_buildtype = 1
  579. If uo_order.sec_audit(arg_Scid,arg_billid,arg_msg,False) = 0 Then
  580. rslt = 0
  581. Goto ext
  582. End If
  583. Destroy uo_order
  584. Case 461
  585. uo_quote uo_qu
  586. uo_qu = Create uo_quote
  587. uo_qu.commit_transaction = sqlca
  588. uo_qu.audit_buildtype = 1
  589. If uo_qu.sec_audit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then
  590. rslt = 0
  591. Goto ext
  592. End If
  593. Destroy uo_qu
  594. Case 1684,2234
  595. uo_sptcheck uo_check
  596. uo_check = Create uo_sptcheck
  597. uo_check.audit_buildtype = 1
  598. If uo_check.audit(arg_billid,publ_operator,arg_msg,False) = 0 Then
  599. rslt = 0
  600. Goto ext
  601. End If
  602. Destroy uo_check
  603. Case 1494
  604. uo_workprice_change uo_workprice
  605. uo_workprice = Create uo_workprice_change
  606. uo_workprice.audit_buildtype = 1
  607. If uo_workprice.audit(arg_billid,publ_operator,arg_msg,False) = 0 Then
  608. rslt = 0
  609. Goto ext
  610. End If
  611. Destroy uo_workprice
  612. Case 2404
  613. uo_price_order uo_price
  614. uo_price = Create uo_price_order
  615. If uo_price.secaudit(arg_billid,publ_operator,False,arg_msg) = 0 Then
  616. rslt = 0
  617. Goto ext
  618. End If
  619. Destroy uo_price
  620. case 4174
  621. uo_requestbuy uo_rqbuy
  622. uo_rqbuy = create uo_requestbuy
  623. uo_rqbuy.audit_buildtype = 1
  624. If uo_rqbuy.audit_2(arg_scid,arg_billid,publ_operator,arg_msg,false) = 0 Then
  625. rslt = 0
  626. Goto ext
  627. End If
  628. Destroy uo_rqbuy
  629. End Choose
  630. ext:
  631. If rslt = 0 Then
  632. Rollback Using ins_tran;
  633. ElseIf arg_ifcommit And rslt = 1 Then
  634. Commit Using ins_tran;
  635. End If
  636. Return rslt
  637. end function
  638. public function integer p_reverse (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  639. Long ls_rowid,ls_empid
  640. Long li_cnt
  641. Long ls_dtype,ls_scid,ls_billid,ls_powerid
  642. Long LL_docflag
  643. DateTime nulldate
  644. SetNull(nulldate)
  645. li_cnt = 0
  646. SELECT count(*)
  647. INTO :li_cnt
  648. FROM oa_doc
  649. Where docid = :arg_docid Using sqlca;
  650. IF sqlca.SQLCode <> 0 THEN
  651. rslt = 0
  652. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  653. GOTO ext
  654. END IF
  655. IF li_cnt <= 0 THEN
  656. rslt = 0
  657. arg_msg = '错误的公文唯一码'
  658. GOTO ext
  659. END IF
  660. SELECT rowid,dtype,scid,billid,powerid,docflag
  661. INTO :ls_rowid ,:ls_dtype,:ls_scid,:ls_billid,:ls_powerid,:LL_docflag
  662. FROM oa_doc
  663. Where docid = :arg_docid Using sqlca;
  664. IF sqlca.SQLCode <> 0 THEN
  665. arg_msg = '查询公文ID失败1>>'+sqlca.SQLErrText
  666. rslt = 0
  667. GOTO ext
  668. END IF
  669. SELECT empid INTO :ls_empid
  670. FROM u_user
  671. Where username = :publ_operator;
  672. IF sqlca.SQLCode <> 0 THEN
  673. arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText
  674. rslt = 0
  675. GOTO ext
  676. END IF
  677. //该人员所在的流转列
  678. li_cnt = 0
  679. SELECT count(*) INTO :li_cnt
  680. FROM oa_doc_flow
  681. WHERE oa_doc_flow.docid = :arg_docid AND
  682. oa_doc_flow.empid = :ls_empid AND
  683. oa_doc_flow.passed = 1;
  684. IF sqlca.SQLCode <> 0 THEN
  685. rslt = 0
  686. arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText
  687. GOTO ext
  688. END IF
  689. IF li_cnt = 0 THEN
  690. rslt = 0
  691. arg_msg = '你没有执行过审批操作,无须逆处理'
  692. GOTO ext
  693. END IF
  694. Long ll_emp_rowid,ll_flowsort
  695. SELECT TOP 1 oa_doc_flow.rowid,oa_doc_flow.flowsort
  696. INTO :ll_emp_rowid,:ll_flowsort
  697. FROM oa_doc_flow
  698. WHERE oa_doc_flow.docid = :arg_docid AND
  699. oa_doc_flow.empid = :ls_empid AND
  700. oa_doc_flow.passed = 1
  701. Order By oa_doc_flow.rowid Desc Using sqlca;
  702. IF sqlca.SQLCode <> 0 THEN
  703. rslt = 0
  704. arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText
  705. GOTO ext
  706. END IF
  707. IF ls_rowid > ll_emp_rowid + 1 THEN
  708. rslt = 0
  709. arg_msg = '你的下一级审批人员已经处理过该公文,不能进行逆处理'
  710. GOTO ext
  711. ELSEIF ls_rowid < ll_emp_rowid + 1 And LL_docflag = 1 THEN
  712. rslt = 0
  713. arg_msg = '你还未处理过该公文,不能进行逆处理'
  714. GOTO ext
  715. END IF
  716. li_cnt = 0
  717. SELECT count(distinct rowid) INTO :li_cnt
  718. FROM oa_doc_flow
  719. Where docid = :arg_docid Using sqlca;
  720. IF sqlca.SQLCode <> 0 THEN
  721. arg_msg = '查询公文ID失败2>>'+sqlca.SQLErrText
  722. rslt = 0
  723. GOTO ext
  724. END IF
  725. //IF ls_rowid = li_cnt + 1 THEN //公文已经完成情况
  726. IF ls_rowid <> 2 THEN
  727. IF LL_docflag = 11 THEN
  728. UPDATE oa_doc
  729. SET docflag = 1,
  730. fnsdt = :nulldate,
  731. fnsemp = ''
  732. Where docid = :arg_docid;
  733. IF sqlca.SQLCode <> 0 THEN
  734. arg_msg = '更新公文ID失败4>>'+sqlca.SQLErrText
  735. rslt = 0
  736. GOTO ext
  737. END IF
  738. IF ls_dtype = 1 THEN
  739. IF opt_caudit(ls_powerid,0,ls_scid, ls_billid, False,arg_msg,'') = 0 THEN
  740. rslt = 0
  741. GOTO ext
  742. END IF
  743. END IF
  744. END IF
  745. UPDATE oa_doc
  746. SET rowid = :ll_emp_rowid,
  747. docflag = 1,
  748. flowsort = :ll_flowsort
  749. Where docid = :arg_docid;
  750. IF sqlca.SQLCode <> 0 THEN
  751. arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText
  752. rslt = 0
  753. GOTO ext
  754. END IF
  755. UPDATE oa_doc_flow
  756. SET Passed = 0,Empcontent = '',greetime = :nulldate
  757. WHERE docid = :arg_docid AND
  758. rowid = :ll_emp_rowid AND
  759. empid = :ls_empid;
  760. IF sqlca.SQLCode <> 0 THEN
  761. arg_msg = '更新公文ID失败3>>'+sqlca.SQLErrText
  762. rslt = 0
  763. GOTO ext
  764. END IF
  765. ELSE //反发起,初始化为草稿状态
  766. UPDATE oa_doc
  767. SET rowid = :ll_emp_rowid,
  768. docflag = 0,
  769. flowsort = 0
  770. Where docid = :arg_docid;
  771. IF sqlca.SQLCode <> 0 THEN
  772. arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText
  773. rslt = 0
  774. GOTO ext
  775. END IF
  776. DELETE FROM oa_doc_flow
  777. Where docid = :arg_docid ;
  778. IF sqlca.SQLCode <> 0 THEN
  779. arg_msg = "删除原有流程失败,请重试!"+'~n'+ins_tran.SQLErrText
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. END IF
  784. ext:
  785. IF rslt = 0 THEN
  786. ROLLBACK Using ins_tran;
  787. ELSEIF arg_ifcommit And rslt = 1 THEN
  788. COMMIT Using ins_tran;
  789. END IF
  790. RETURN rslt
  791. end function
  792. public function integer p_init (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  793. Long ls_flowid = 0
  794. Long ls_empid = 0
  795. Long ls_rowid = 0
  796. String ls_dscrp
  797. Int li_if_rivet
  798. String ls_flowstepname[],ls_flowempstr[]
  799. Long ls_flowsort[]
  800. Int li_ifopflag[]
  801. Int li_limithour[]
  802. Long i,ll_i,ll_j
  803. Long ls_colomnid
  804. Long ll_ds_rowcount,ls_i
  805. String ls_Empcontent
  806. Long ll_empid_arr[],ll_mxbt
  807. String ls_doctitle,ls_doccontent
  808. Long ll_pushid
  809. uo_phone_push uo_push
  810. uo_push = Create uo_phone_push
  811. Select flowid,rowid,doctitle,doccontent
  812. Into :ls_flowid,:ls_rowid,:ls_doctitle,:ls_doccontent
  813. From oa_doc
  814. Where oa_doc.docID = :arg_docid Using ins_tran;
  815. If ins_tran.SQLCode <> 0 Then
  816. rslt = 0
  817. arg_msg = '查询公文所用流程ID失败>>'+ins_tran.SQLErrText
  818. Goto ext
  819. End If
  820. If ls_flowid <= 0 Then
  821. rslt = 0
  822. arg_msg = '错误公文流程'
  823. Goto ext
  824. End If
  825. //如果审批流程类型是直接完成审核,则调用归档函数
  826. Select if_rivet
  827. Into :li_if_rivet
  828. From OA_FLOWDEF
  829. Where flowid = :ls_flowid;
  830. If sqlca.SQLCode <> 0 Then
  831. rslt = 0
  832. arg_msg = '查询审核流程是否直接完成审批类型失败,'+sqlca.SQLErrText
  833. Goto ext
  834. End If
  835. ls_dscrp = '发起人['+publ_operator+']发起公文流转!'
  836. Select empid Into :ls_empid
  837. From u_user
  838. Where Username = :publ_operator Using ins_tran;
  839. If ins_tran.SQLCode <> 0 Then
  840. arg_msg = '查询用户ID失败>>'+ins_tran.SQLErrText
  841. rslt = 0
  842. Goto ext
  843. End If
  844. If ls_empid < 0 Then
  845. rslt = 0
  846. arg_msg = '错误用户ID'
  847. Goto ext
  848. End If
  849. //先删除旧流程表
  850. Delete From oa_doc_flow
  851. Where docID = :arg_docid Using ins_tran ;
  852. If ins_tran.SQLCode <> 0 Then
  853. arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText
  854. rslt = 0
  855. Goto ext
  856. End If
  857. //插入流程列表
  858. //1.插入第一行:发起公文
  859. If li_if_rivet <> 2 Then
  860. ls_Empcontent = '发起通过'
  861. Else
  862. ls_Empcontent = '发起通过并直接完成审批'
  863. End If
  864. Insert Into oa_doc_flow
  865. (
  866. Docid,
  867. Empid,
  868. rowid,
  869. columnid,
  870. flowsort,
  871. dscrp,
  872. Passed ,
  873. Empcontent,
  874. greetime
  875. )
  876. Values
  877. (
  878. :arg_docid,
  879. :ls_empid,
  880. 1,
  881. 1,
  882. 0,
  883. :ls_dscrp,
  884. 1,
  885. :ls_Empcontent,
  886. getdate()
  887. ) Using ins_tran ;
  888. If ins_tran.SQLCode <> 0 Then
  889. arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText
  890. rslt = 0
  891. Goto ext
  892. End If
  893. //查找流程列表,如果是直接完成批审类型,不需要此步骤
  894. If li_if_rivet <> 2 Then
  895. ls_colomnid = 0
  896. i = 1
  897. Declare cur_mx Cursor For
  898. Select oa_doc_step.flowstepname,
  899. oa_doc_step.flowsort,
  900. oa_doc_step.flowempstr,
  901. oa_doc_step.limithour
  902. From oa_doc_step
  903. Where oa_doc_step.docid = :arg_docid
  904. Order By oa_doc_step.flowsort Using ins_tran ;
  905. Open cur_mx;
  906. Fetch cur_mx Into :ls_flowstepname[i],:ls_flowsort[i],:ls_flowempstr[i],:li_limithour[i];
  907. Do While ins_tran.SQLCode = 0
  908. i++
  909. Fetch cur_mx Into :ls_flowstepname[i],:ls_flowsort[i],:ls_flowempstr[i],:li_limithour[i];
  910. Loop
  911. Close cur_mx;
  912. If i <= 1 Then
  913. rslt = 0
  914. arg_msg = '没有指定审批步骤!'
  915. Goto ext
  916. End If
  917. datastore ds_oa_flow
  918. ds_oa_flow = Create datastore
  919. ds_oa_flow.DataObject = "ds_oa_flow_emp_choose"
  920. ds_oa_flow.SetTransObject(ins_tran)
  921. ll_mxbt = 0
  922. For ll_i = 1 To i - 1
  923. ds_oa_flow.Retrieve(arg_docid,ls_flowsort[ll_i])
  924. ll_ds_rowcount = ds_oa_flow.RowCount()
  925. If ll_ds_rowcount <= 0 Then
  926. rslt = 0
  927. arg_msg = '可能是单据指定流程失败,或者审批流程没有指定审批步骤.'
  928. Goto ext
  929. End If
  930. ls_colomnid = 0
  931. For ll_j = 1 To ll_ds_rowcount
  932. ls_empid = ds_oa_flow.Object.empid[ll_j]
  933. If ll_i = 1 Then
  934. ll_mxbt++
  935. ll_empid_arr[ll_mxbt] = ls_empid
  936. End If
  937. ls_colomnid++
  938. Insert Into oa_doc_flow
  939. (
  940. Docid,
  941. Empid,
  942. rowid,
  943. columnid,
  944. flowsort,
  945. dscrp,
  946. limithour
  947. )
  948. Values
  949. (
  950. :arg_docid,
  951. :ls_empid,
  952. :ll_i + 1,
  953. :ls_colomnid,
  954. :ls_flowsort[ll_i],
  955. '',
  956. :li_limithour[ll_i]
  957. ) Using ins_tran ;
  958. If ins_tran.SQLCode <> 0 Then
  959. arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText
  960. rslt = 0
  961. Goto ext
  962. End If
  963. Next
  964. Next
  965. End If
  966. Update oa_doc
  967. Set oa_doc.docflag = 1
  968. Where oa_doc.docID = :arg_docid Using ins_tran;
  969. If ins_tran.SQLCode <> 0 Then
  970. rslt = 0
  971. arg_msg = '更新公文状态失败>>'+ins_tran.SQLErrText
  972. Goto ext
  973. End If
  974. Update oa_doc
  975. Set rowid = 2,flowsort = :ls_flowsort[1]
  976. Where docID = :arg_docid Using ins_tran;
  977. If ins_tran.SQLCode <> 0 Then
  978. arg_msg = '更新公文ID失败2>>'+ins_tran.SQLErrText
  979. rslt = 0
  980. Goto ext
  981. End If
  982. Update oa_doc_flow
  983. Set read_flag = 0,
  984. limittime = DATEADD(hh, limithour, getdate())
  985. Where docID = :arg_docid And rowid = 2 Using ins_tran;
  986. If ins_tran.SQLCode <> 0 Then
  987. arg_msg = '更新公文为未读失败>>'+ins_tran.SQLErrText
  988. rslt = 0
  989. Goto ext
  990. End If
  991. //如果是直接完成审批类型,调用归档函数
  992. If li_if_rivet = 2 Then
  993. If p_to_nextstep(arg_docid,-1,False,arg_msg) = 0 Then
  994. arg_msg = '公文归档失败>>'+arg_msg
  995. rslt = 0
  996. Goto ext
  997. End If
  998. End If
  999. //发送手机推送
  1000. If li_if_rivet <> 2 Then
  1001. If uo_push.uf_add(ll_empid_arr, ls_doctitle, ls_doccontent, 'oatome', String(arg_docid), ll_pushid, arg_msg, False) <> 1 Then
  1002. rslt = 0
  1003. Goto ext
  1004. End If
  1005. End If
  1006. ext:
  1007. If rslt = 0 Then
  1008. Rollback Using ins_tran;
  1009. ElseIf arg_ifcommit And rslt = 1 Then
  1010. Commit Using ins_tran;
  1011. End If
  1012. Destroy uo_push
  1013. Return rslt
  1014. end function
  1015. public function integer p_stop (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1016. UPDATE oa_doc
  1017. SET oa_doc.docflag = 10
  1018. Where oa_doc.docID = :arg_docid USING ins_tran;
  1019. IF ins_tran.SQLCode <> 0 THEN
  1020. rslt = 0
  1021. arg_msg = '更新公文失败>>'+ins_tran.SQLErrText
  1022. GOTO ext
  1023. END IF
  1024. ext:
  1025. IF rslt = 0 THEN
  1026. ROLLBACK USING ins_tran;
  1027. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1028. COMMIT USING ins_tran;
  1029. END IF
  1030. RETURN rslt
  1031. end function
  1032. public function integer p_continue (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1033. UPDATE oa_doc
  1034. SET oa_doc.docflag = 1
  1035. Where oa_doc.docID = :arg_docid USING ins_tran;
  1036. IF ins_tran.SQLCode <> 0 THEN
  1037. rslt = 0
  1038. arg_msg = '更新公文失败>>'+ins_tran.SQLErrText
  1039. GOTO ext
  1040. END IF
  1041. ext:
  1042. IF rslt = 0 THEN
  1043. ROLLBACK USING ins_tran;
  1044. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1045. COMMIT USING ins_tran;
  1046. END IF
  1047. RETURN rslt
  1048. end function
  1049. public function integer p_check_if_oaflow (long arg_scid, long arg_billid, long arg_powerid, ref string arg_msg);Long RSLT = 1
  1050. Long CNT
  1051. Long ls_doc_status
  1052. SELECT COUNT(*)
  1053. INTO :CNT
  1054. FROM oa_doc
  1055. Where dtype = 1 AND powerid = :arg_powerid AND SCID = :ARG_SCID AND BILLID = :ARG_BILLID USING SQLCA;
  1056. IF SQLCA.SQLCode <> 0 THEN
  1057. RSLT = 0
  1058. ARG_MSG = '查询操作失败:OA审批公文:'+SQLCA.SQLErrText
  1059. GOTO ext
  1060. END IF
  1061. IF CNT <= 0 THEN
  1062. RSLT = 0
  1063. ARG_MSG = '没有发现对应审批流程'
  1064. GOTO ext
  1065. END IF
  1066. SELECT docflag
  1067. INTO :ls_doc_status
  1068. FROM oa_doc
  1069. Where dtype = 1 AND powerid = :arg_powerid AND SCID = :ARG_SCID AND BILLID = :ARG_BILLID USING SQLCA;
  1070. IF SQLCA.SQLCode <> 0 THEN
  1071. RSLT = 0
  1072. ARG_MSG = '查询操作失败:OA审批公文状态:'+SQLCA.SQLErrText
  1073. GOTO ext
  1074. END IF
  1075. IF ls_doc_status = 1 THEN
  1076. RSLT = 0
  1077. ARG_MSG = '该单据正处于待OA流程审批中,不能删改、审核、撤审'
  1078. GOTO ext
  1079. ELSEIF ls_doc_status = 10 THEN
  1080. RSLT = 0
  1081. ARG_MSG = '该单据正处于OA流程暂停审批中,不能删改、审核、撤审'
  1082. GOTO ext
  1083. ELSEIF ls_doc_status = 11 THEN
  1084. RSLT = 0
  1085. ARG_MSG = '该单据已经完成OA流程审批,不能删改、审核、撤审'
  1086. GOTO ext
  1087. END IF
  1088. ext:
  1089. RETURN RSLT
  1090. end function
  1091. public function integer p_create_oa_flow (long arg_powerid, long arg_scid, long arg_billid, string arg_billcode, string arg_relcode, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg);Long rslt = 0
  1092. Long cnt = 0
  1093. Decimal ls_sumqty,ls_sumamt ,ls_disqty,ls_disamt,ld_rebate
  1094. Long ls_flowid,ls_billtypeid,arg_docid
  1095. Long ll_typeid,ll_ordertype
  1096. Decimal ld_minqty,ld_minprice
  1097. Decimal ld_sum_checkqty,ld_min_checkqty
  1098. Dec lde_wrkchg_new_qty, lde_wrkchg_chgname_qty //工价表变更单, 明细新增类型的条目数量,修改类型工序名称变更的条目数量
  1099. Int li_kind //高级价格策略类型
  1100. String ls_poexpr //高级价格策略表示式
  1101. Decimal ld_poexpr_price //价格策略目标价
  1102. Decimal ld_poexpr_rebate // 价格策略目标价折扣
  1103. Decimal ld_list_price //价格表单价
  1104. String ls_cuskind
  1105. Long ll_buykind
  1106. String ls_argname,ls_sqlstr
  1107. Decimal ld_argrslt
  1108. String ls_colname
  1109. String ls_kindname,ls_cussptname,ls_moneyname
  1110. String ls_mtrlname, ls_mtrlmode,ls_unit
  1111. Decimal ld_qty,ld_price
  1112. String ls_status,ls_woodcode,ls_pcode
  1113. Long ll_deptid,ll_mtrltypeid
  1114. Decimal ld_peramt ,ld_price_dept
  1115. IF arg_powerid = 0 THEN
  1116. rslt = 0
  1117. ARG_MSG = '错误的权限ID'
  1118. GOTO ext
  1119. END IF
  1120. CHOOSE CASE arg_powerid
  1121. CASE 6,1324 //'销售订单审核'
  1122. SELECT SUM(u_SaleTaskMx.SaleQty) AS sumqty,
  1123. SUM(u_SaleTaskMx.Price * u_SaleTaskMx.SaleQty) AS sumamt
  1124. INTO :ls_sumqty,:ls_sumamt
  1125. FROM u_SaleTaskMx INNER JOIN
  1126. u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND
  1127. u_SaleTaskMx.TaskID = u_SaleTask.TaskID
  1128. WHERE u_SaleTask.Status = 4
  1129. AND u_SaleTask.scid = :arg_Scid
  1130. And u_SaleTask.TaskID = :arg_billid Using sqlca;
  1131. IF sqlca.SQLCode <> 0 THEN
  1132. rslt = 0
  1133. ARG_MSG = '查询操作失败,销售订单总数量、总金额:'+sqlca.SQLErrText
  1134. GOTO ext
  1135. END IF
  1136. SELECT u_SaleTask.typeid INTO :ll_typeid
  1137. FROM u_saletask
  1138. WHERE u_SaleTask.Status = 4
  1139. AND u_SaleTask.scid = :arg_Scid
  1140. And u_SaleTask.TaskID = :arg_billid Using sqlca;
  1141. IF sqlca.SQLCode <> 0 THEN
  1142. rslt = 0
  1143. ARG_MSG = '查询操作失败,销售订单分类:'+sqlca.SQLErrText
  1144. GOTO ext
  1145. END IF
  1146. ls_sumamt = Round(ls_sumamt,2)
  1147. ls_disqty = 0
  1148. ls_disamt = 0
  1149. ld_rebate = 1
  1150. SELECT u_saletype.typename,
  1151. u_cust.name,
  1152. cw_currency.name
  1153. INTO :ls_kindname,
  1154. :ls_cussptname,
  1155. :ls_moneyname
  1156. FROM u_SaleTask LEFT OUTER JOIN
  1157. u_cust ON u_SaleTask.CusID = u_cust.cusid LEFT OUTER JOIN
  1158. cw_currency ON u_SaleTask.moneyid = cw_currency.moneyid LEFT OUTER JOIN
  1159. u_saletype ON u_SaleTask.typeid = u_saletype.typeid
  1160. WHERE u_saletask.scid = :arg_scid
  1161. And u_SaleTask.TaskID = :arg_billid Using sqlca;
  1162. IF sqlca.SQLCode <> 0 THEN
  1163. ls_kindname = ''
  1164. ls_cussptname = ''
  1165. ls_moneyname = ''
  1166. END IF
  1167. IF ls_moneyname = '人民币' THEN ls_moneyname = '元'
  1168. IF ls_cussptname <> '' THEN ls_cussptname = '客户:'+ls_cussptname
  1169. SELECT top 1 u_mtrldef.mtrlname,
  1170. u_mtrldef.mtrlmode,
  1171. u_SaleTaskMx.SaleQty,
  1172. u_mtrldef.unit,
  1173. u_SaleTaskMx.enprice
  1174. INTO :ls_mtrlname,
  1175. :ls_mtrlmode,
  1176. :ld_qty,
  1177. :ls_unit,
  1178. :ld_price
  1179. FROM u_SaleTaskMx INNER JOIN
  1180. u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid
  1181. WHERE u_SaleTaskMx.scid = :arg_scid
  1182. AND u_SaleTaskMx.taskid = :arg_billid
  1183. Order By u_SaleTaskMx.SaleQty * u_SaleTaskMx.enprice Desc Using sqlca;
  1184. IF sqlca.SQLCode <> 0 THEN
  1185. ls_mtrlname = ''
  1186. ls_mtrlmode = ''
  1187. ld_qty = 0
  1188. ls_unit = ''
  1189. ld_price = 0
  1190. END IF
  1191. CASE 94,1277,4299
  1192. SELECT SUM(u_buytaskmx.uQty) AS sumqty,
  1193. SUM(u_buytaskmx.uprice * u_buytaskmx.uQty) AS sumamt
  1194. INTO :ls_sumqty,:ls_sumamt
  1195. FROM u_buytaskmx INNER JOIN
  1196. u_buytask ON u_buytaskmx.scid = u_buytask.scid AND
  1197. u_buytaskmx.TaskID = u_buytask.TaskID
  1198. WHERE u_buytask.Status = 4
  1199. AND u_buytask.scid = :arg_Scid
  1200. And u_buytask.TaskID = :arg_billid Using sqlca;
  1201. IF sqlca.SQLCode <> 0 THEN
  1202. rslt = 0
  1203. ARG_MSG = '查询操作失败,采购订单总数量、总金额:'+sqlca.SQLErrText
  1204. GOTO ext
  1205. END IF
  1206. SELECT kind
  1207. INTO :ll_buykind
  1208. FROM u_buyTask
  1209. WHERE scid = :arg_scid
  1210. And TaskID = :arg_billid Using sqlca;
  1211. IF sqlca.SQLCode <> 0 THEN
  1212. rslt = 0
  1213. ARG_MSG = '查询操作失败,采购订单分类:'+sqlca.SQLErrText
  1214. GOTO ext
  1215. END IF
  1216. ls_sumamt = Round(ls_sumamt,2)
  1217. ls_disqty = 0
  1218. ls_disamt = 0
  1219. ld_rebate = 1
  1220. SELECT u_buytype.typename,
  1221. u_spt.name,
  1222. cw_currency.name
  1223. INTO :ls_kindname,
  1224. :ls_cussptname,
  1225. :ls_moneyname
  1226. FROM u_buyTask INNER JOIN
  1227. u_spt ON u_buyTask.sptID = u_spt.sptid INNER JOIN
  1228. cw_currency ON u_buyTask.moneyid = cw_currency.moneyid LEFT OUTER JOIN
  1229. u_buytype ON u_buyTask.kind = u_buytype.typeid
  1230. WHERE u_buytask.scid = :arg_scid
  1231. And u_buytask.TaskID = :arg_billid Using sqlca;
  1232. IF sqlca.SQLCode <> 0 THEN
  1233. ls_kindname = ''
  1234. ls_cussptname = ''
  1235. ls_moneyname = ''
  1236. END IF
  1237. IF ls_moneyname = '人民币' THEN ls_moneyname = '元'
  1238. IF ls_cussptname <> '' THEN ls_cussptname = '供应商:'+ls_cussptname
  1239. SELECT top 1 u_mtrldef.mtrlname,
  1240. u_mtrldef.mtrlmode,
  1241. u_buyTaskMx.uqty,
  1242. u_buyTaskMx.unit,
  1243. u_buytaskmx.enprice
  1244. INTO :ls_mtrlname,
  1245. :ls_mtrlmode,
  1246. :ld_qty,
  1247. :ls_unit,
  1248. :ld_price
  1249. FROM u_buyTaskMx INNER JOIN
  1250. u_mtrldef ON u_buyTaskMx.MtrlID = u_mtrldef.mtrlid
  1251. WHERE u_buytaskmx.taskid = :arg_billid
  1252. AND u_buytaskmx.scid = :arg_scid
  1253. Order By u_buytaskmx.uQty * u_buytaskmx.enprice Desc Using sqlca;
  1254. IF sqlca.SQLCode <> 0 THEN
  1255. ls_mtrlname = ''
  1256. ls_mtrlmode = ''
  1257. ld_qty = 0
  1258. ls_unit = ''
  1259. ld_price = 0
  1260. END IF
  1261. CASE 36,1138
  1262. SELECT orderqty ,ordertype
  1263. INTO :ls_sumqty,:ll_ordertype
  1264. FROM u_order_ml
  1265. WHERE scid = :arg_scid
  1266. AND orderid = :arg_billid
  1267. And Status = 4 Using sqlca;
  1268. IF sqlca.SQLCode <> 0 THEN
  1269. rslt = 0
  1270. ARG_MSG = '查询操作失败,生产数量:'+sqlca.SQLErrText
  1271. GOTO ext
  1272. END IF
  1273. CASE 461
  1274. SELECT min(qty),min(sumprice_1)
  1275. INTO :ld_minqty,:ld_minprice
  1276. FROM u_quotemx
  1277. WHERE scid = :arg_scid
  1278. AND quoteid = :arg_billid
  1279. Using sqlca;
  1280. IF sqlca.SQLCode <> 0 THEN
  1281. rslt = 0
  1282. ARG_MSG = '查询操作失败,销售报价单:'+sqlca.SQLErrText
  1283. GOTO ext
  1284. END IF
  1285. ld_minprice = Round(ld_minprice,10)
  1286. CASE 1684,2234
  1287. SELECT sum(u_sptcheck_mx.checkqty)
  1288. INTO :ld_sum_checkqty
  1289. FROM u_sptcheck_mx INNER JOIN
  1290. u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid
  1291. WHERE u_sptcheck.scid = :arg_scid
  1292. And u_sptcheck_mx.billid = :arg_billid Using sqlca;
  1293. IF sqlca.SQLCode <> 0 THEN
  1294. rslt = 0
  1295. ARG_MSG = '查询总来单质检数操作失败,供应商质检单:'+sqlca.SQLErrText
  1296. GOTO ext
  1297. END IF
  1298. SELECT min(u_sptcheck_mx.checkqty)
  1299. INTO :ld_min_checkqty
  1300. FROM u_sptcheck_mx INNER JOIN
  1301. u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid
  1302. WHERE u_sptcheck.scid = :arg_scid
  1303. And u_sptcheck_mx.billid = :arg_billid Using sqlca;
  1304. IF sqlca.SQLCode <> 0 THEN
  1305. rslt = 0
  1306. ARG_MSG = '查询最少来单质检数操作失败,供应商质检单:'+sqlca.SQLErrText
  1307. GOTO ext
  1308. END IF
  1309. CASE 1494 //工价表变更单 //明细存在新增或变更类型改过工序名称的
  1310. SELECT sum(CASE u_workprice_changemx.editflag when 1 THEN 1 ELSE 0 END ),
  1311. sum(CASE u_workprice_changemx.editflag when 0 Then (CASE when u_workprice_changemx.proname <> u_workprice_changemx.proname_ori THEN 1 ELSE 0 END) ELSE 0 END)
  1312. Into :lde_wrkchg_new_qty,:lde_wrkchg_chgname_qty
  1313. From u_workprice_change Inner JOIN
  1314. u_workprice_changemx On u_workprice_change.billid = u_workprice_changemx.billid
  1315. Where u_workprice_change.billid = :arg_billid
  1316. Using sqlca;
  1317. IF sqlca.SQLCode <> 0 THEN
  1318. rslt = 0
  1319. ARG_MSG = '查询操作失败,工价表变更单:'+sqlca.SQLErrText
  1320. GOTO ext
  1321. END IF
  1322. CASE 2404 //高级价格策略
  1323. SELECT u_price_order.kind,
  1324. u_price_order.poexpr,
  1325. ISNULL(v_sale_price.price, 0) ,
  1326. isnull(u_cust.cuskind,'')
  1327. INTO :li_kind,
  1328. :ls_poexpr,
  1329. :ld_list_price,
  1330. :ls_cuskind
  1331. FROM u_price_order LEFT OUTER JOIN
  1332. u_cust ON u_price_order.cusid = u_cust.cusid LEFT OUTER JOIN
  1333. (SELECT pricelistid, mtrlid, MAX(price) AS price
  1334. FROM u_sale_price_mx
  1335. GROUP BY pricelistid, mtrlid) v_sale_price ON
  1336. u_price_order.mtrlid = v_sale_price.mtrlid AND
  1337. u_cust.pricelistid = v_sale_price.pricelistid
  1338. Where u_price_order.poid = :arg_billid Using sqlca;
  1339. IF sqlca.SQLCode <> 0 THEN
  1340. rslt = 0
  1341. ARG_MSG = '查询操作失败,高级价格策略:'+sqlca.SQLErrText
  1342. GOTO ext
  1343. END IF
  1344. IF li_kind = 1 THEN
  1345. ld_poexpr_price = f_price_order_poexpr(ls_poexpr)
  1346. ELSE
  1347. ld_poexpr_price = 0
  1348. END IF
  1349. ld_poexpr_price = Round(ld_poexpr_price,10)
  1350. IF ld_list_price = 0 THEN
  1351. ld_poexpr_rebate = 0
  1352. ELSE
  1353. ld_poexpr_rebate = ld_poexpr_price / ld_list_price
  1354. END IF
  1355. ld_poexpr_rebate = Round(ld_poexpr_rebate,2)
  1356. ls_cuskind = '"'+ls_cuskind+'"'
  1357. CASE 4174
  1358. //非产生类物料申购单
  1359. SELECT top 1 u_mtrldef.mtrlname,
  1360. u_requestbuymxmx.status,
  1361. u_requestbuymxmx.woodcode,
  1362. u_requestbuymxmx.pcode,
  1363. u_requestbuymxmx.uqty,
  1364. u_requestbuymxmx.unit,
  1365. u_requestbuymxmx.price,
  1366. u_requestbuy.deptid,
  1367. u_mtrldef.mtrltypeid,
  1368. isnull(u_dept_peramt.peramt,0)
  1369. INTO :ls_mtrlname,
  1370. :ls_status,
  1371. :ls_woodcode,
  1372. :ls_pcode,
  1373. :ld_qty,
  1374. :ls_unit,
  1375. :ld_price_dept,
  1376. :ll_deptid,
  1377. :ll_mtrltypeid,
  1378. :ld_peramt
  1379. FROM u_requestbuymxmx INNER JOIN
  1380. u_mtrldef ON u_requestbuymxmx.mtrlid = u_mtrldef.mtrlid INNER JOIN
  1381. u_requestbuy ON u_requestbuymxmx.scid = u_requestbuy.scid AND
  1382. u_requestbuymxmx.requestbuyid = u_requestbuy.requestbuyid LEFT OUTER JOIN
  1383. u_dept_peramt ON u_requestbuy.deptid = u_dept_peramt.deptid AND
  1384. u_mtrldef.mtrltypeid = u_dept_peramt.mtrltypeid
  1385. WHERE u_requestbuymxmx.scid = :arg_scid
  1386. AND u_requestbuymxmx.requestbuyid = :arg_billid
  1387. Order By u_requestbuymxmx.Price Desc Using sqlca;
  1388. IF sqlca.SQLCode <> 0 THEN
  1389. ls_mtrlname = ''
  1390. ls_status = ''
  1391. ls_woodcode = ''
  1392. ls_pcode = ''
  1393. ld_qty = 0
  1394. ls_unit = ''
  1395. ld_price_dept = 0
  1396. ll_deptid = 0
  1397. ll_mtrltypeid = 0
  1398. ld_peramt = 0
  1399. END IF
  1400. ld_price = ld_price_dept
  1401. ls_sumamt = Round(ld_qty * ld_price,5)
  1402. END CHOOSE
  1403. String ls_temp
  1404. Long i,j
  1405. Boolean if_find = False
  1406. Long rslt_flowid = 0,rslt_billtype = 0
  1407. String ls
  1408. Long s_rtn
  1409. datastore ds_flow_set
  1410. ds_flow_set = Create datastore
  1411. ds_flow_set.DataObject = 'ds_oa_flow_set'
  1412. ds_flow_set.SetTransObject( sqlca)
  1413. ds_flow_set.Retrieve(arg_powerid)
  1414. IF ds_flow_set.RowCount( ) <= 0 THEN
  1415. rslt = 0
  1416. ARG_MSG = '没有设置审批条件'
  1417. GOTO ext
  1418. END IF
  1419. datastore ds_parm
  1420. ds_parm = Create datastore
  1421. ds_parm.DataObject = 'ds_oa_flow_sqlarg'
  1422. ds_parm.SetTransObject(sqlca)
  1423. ds_parm.Retrieve(arg_powerid)
  1424. FOR i = 1 To ds_flow_set.RowCount( )
  1425. ls_temp = ds_flow_set.Object.relation[i]
  1426. FOR j = 1 To ds_parm.RowCount()
  1427. ls_argname = ds_parm.Object.argname[j]
  1428. ls_sqlstr = ds_parm.Object.sqlstr[j]
  1429. IF ls_sqlstr = '' THEN CONTINUE
  1430. ls_argname = '['+ls_argname+']'
  1431. SELECT Top 1 Replace(:ls_sqlstr,':arg_id',:arg_billid) Into :ls_sqlstr From u_user;
  1432. IF Pos(ls_temp,ls_argname) > 0 THEN
  1433. DECLARE cur_get Dynamic Cursor FOR sqlsa ;
  1434. PREPARE sqlsa From :ls_sqlstr ;
  1435. OPEN Dynamic cur_get;
  1436. FETCH cur_get Into :ld_argrslt;
  1437. IF sqlca.SQLCode <> 0 THEN
  1438. rslt = 0
  1439. ARG_MSG = '查询自定义sql参数:'+ls_argname+' 的值失败'
  1440. GOTO ext
  1441. END IF
  1442. CLOSE cur_get;
  1443. SELECT Top 1 Replace(:ls_temp,:ls_argname,:ld_argrslt) Into :ls_temp From u_user;
  1444. END IF
  1445. NEXT
  1446. SELECT Top 1 Replace(:ls_temp,'采购订单分类',:ll_buykind) Into :ls_temp From u_user;
  1447. SELECT Top 1 Replace(:ls_temp,'总数量',:ls_sumqty) Into :ls_temp From u_user;
  1448. SELECT Top 1 Replace(:ls_temp,'总金额',:ls_sumamt) Into :ls_temp From u_user;
  1449. SELECT Top 1 Replace(:ls_temp,'订单分类',:ll_typeid) Into :ls_temp From u_user;
  1450. SELECT Top 1 Replace(:ls_temp,'计划类型',:ll_ordertype) Into :ls_temp From u_user;
  1451. SELECT Top 1 Replace(:ls_temp,'客户还价',:ld_minprice) Into :ls_temp From u_user;
  1452. SELECT Top 1 Replace(:ls_temp,'报价数量',:ld_minqty) Into :ls_temp From u_user;
  1453. SELECT Top 1 Replace(:ls_temp,'总来单质检数',:ld_sum_checkqty) Into :ls_temp From u_user;
  1454. SELECT Top 1 Replace(:ls_temp,'最少来单质检数',:ld_min_checkqty) Into :ls_temp From u_user;
  1455. SELECT Top 1 Replace(:ls_temp,'新增类型条目数量',:lde_wrkchg_new_qty) Into :ls_temp From u_user;
  1456. SELECT Top 1 Replace(:ls_temp,'修改类型且变更工序名条目数量',:lde_wrkchg_chgname_qty) Into :ls_temp From u_user;
  1457. SELECT Top 1 Replace(:ls_temp,'价格策略类型',:li_kind) Into :ls_temp From u_user;
  1458. // Select Top 1 Replace(:ls_temp,'价格限制',0) Into :ls_temp From u_user;
  1459. // Select Top 1 Replace(:ls_temp,'价格指定',1) Into :ls_temp From u_user;
  1460. // Select Top 1 Replace(:ls_temp,'折扣指定',2) Into :ls_temp From u_user;
  1461. SELECT Top 1 Replace(:ls_temp,'价格策略目标价折扣',:ld_poexpr_rebate) Into :ls_temp From u_user;
  1462. SELECT Top 1 Replace(:ls_temp,'价格策略目标价',:ld_poexpr_price) Into :ls_temp From u_user;
  1463. SELECT Top 1 Replace(:ls_temp,'客户分类',:ls_cuskind) Into :ls_temp From u_user;
  1464. SELECT Top 1 Replace(:ls_temp,'非生产物料类别',:ll_mtrltypeid) Into :ls_temp From u_user;
  1465. SELECT Top 1 Replace(:ls_temp,'非生产部门',:ll_deptid) Into :ls_temp From u_user;
  1466. SELECT Top 1 Replace(:ls_temp,'参考单价',:ld_price_dept) Into :ls_temp From u_user;
  1467. SELECT Top 1 Replace(:ls_temp,'月预算',:ld_peramt) Into :ls_temp From u_user;
  1468. ls_temp = 'if('+ls_temp+',1,0)'
  1469. ls = ds_flow_set.Modify("aa.expression='"+ls_temp+"'")
  1470. s_rtn = Long(ds_flow_set.Object.aa[i])
  1471. IF s_rtn = 1 THEN
  1472. rslt_flowid = ds_flow_set.Object.flowid[i]
  1473. rslt_billtype = ds_flow_set.Object.BilltypeAD[i]
  1474. rslt = 1
  1475. if_find = True
  1476. EXIT
  1477. END IF
  1478. NEXT
  1479. IF Not if_find THEN
  1480. rslt = 0
  1481. ARG_MSG = '没有合适的审批流程,可能审批条件没有设置'
  1482. GOTO ext
  1483. END IF
  1484. uo_oa_doc uo_tran
  1485. uo_tran = Create uo_oa_doc
  1486. uo_tran.ins_tran = sqlca
  1487. Long ls_settypeid
  1488. ls_settypeid = f_oa_find_settype(arg_powerid)
  1489. s_oadoc s_savedoc
  1490. IF ls_settypeid > 0 THEN
  1491. s_savedoc.doctitle = s_oaflow_settype[ls_settypeid].setname+'(自动)'
  1492. If (arg_powerid = 94 Or arg_powerid = 1277 Or arg_powerid = 6 Or arg_powerid = 4299) And ls_cussptname <> '' And ls_mtrlname <> '' THEN
  1493. s_savedoc.doccontent = ls_kindname+' '+ls_cussptname+' 金额:'+String(ls_sumamt,'#,##0.##')+','+ls_mtrlname+' '+ls_mtrlmode+' '+String(ld_price,'#,##0.##########')+' '+ls_moneyname+' '+String(ld_qty,'#,##0.##########')+ls_unit+'...'
  1494. ELSEIF arg_powerid = 4174 THEN
  1495. s_savedoc.doccontent = ls_mtrlname+' '+String(ld_qty,'#,##0.##########')+ls_unit+' 单价:'+String(ld_price,'#,##0.##########')+'元'+' 金额:'+String(ls_sumamt,'#,##0.##')
  1496. ELSE
  1497. s_savedoc.doccontent = '系统自动发起公文,相关号码:'+arg_relcode
  1498. s_savedoc.doccontent_ori = '系统自动发起公文,相关号码:'+arg_relcode
  1499. END IF
  1500. ELSE
  1501. s_savedoc.doctitle = '系统自动发起公文'
  1502. s_savedoc.doccontent = '系统自动发起公文,相关号码:'+arg_relcode
  1503. s_savedoc.doccontent_ori = '系统自动发起公文,相关号码:'+arg_relcode
  1504. END IF
  1505. s_savedoc.docid = 0
  1506. s_savedoc.dscrp = arg_dscrp
  1507. s_savedoc.dtype = 1
  1508. s_savedoc.billcode = arg_billcode
  1509. s_savedoc.flowid = rslt_flowid
  1510. s_savedoc.rowid = 1
  1511. s_savedoc.docstatus = 1
  1512. s_savedoc.scid = arg_Scid
  1513. s_savedoc.billid = arg_billid
  1514. s_savedoc.powerid = arg_powerid
  1515. IF uo_tran.save_doc(s_savedoc, ARG_MSG,arg_docid,False) = 0 THEN
  1516. rslt = 0
  1517. GOTO ext
  1518. END IF
  1519. ins_docid = arg_docid
  1520. Destroy uo_tran
  1521. ext:
  1522. IF rslt = 0 THEN
  1523. ROLLBACK Using sqlca;
  1524. ELSEIF arg_ifcommit And rslt = 1 THEN
  1525. COMMIT Using sqlca;
  1526. END IF
  1527. Destroy ds_parm
  1528. RETURN rslt
  1529. end function
  1530. public function integer uof_top1_sort_id (long arg_docid, ref string arg_ref_sort, ref long arg_ref_flowid, ref string arg_msg);Int rslt = 1
  1531. SELECT TOP 1 OA_FLOWDEF_STEP.flowsort,OA_FLOWDEF_STEP.flowid
  1532. INTO :arg_ref_sort,:arg_ref_flowid
  1533. FROM oa_doc INNER JOIN
  1534. OA_FLOWDEF_STEP ON oa_doc.flowid = OA_FLOWDEF_STEP.flowid
  1535. WHERE oa_doc.docid = :arg_docid
  1536. ORDER BY OA_FLOWDEF_STEP.flowsort
  1537. USING ins_tran;
  1538. IF ins_tran.SQLCode <> 0 THEN
  1539. rslt = 0
  1540. arg_msg = '查询操作失败,开始流转编序:'+ins_tran.SQLErrText
  1541. GOTO ext
  1542. END IF
  1543. ext:
  1544. RETURN rslt
  1545. end function
  1546. public function integer p_to_nextstep (long arg_docid, long arg_sort, boolean arg_ifcommit, ref string arg_msg);Long RSLT = 1
  1547. Long ll_maxrowid,ls_colomnid = 0,ll_pushid
  1548. Long ll_empid_arr[],ll_mxbt
  1549. String ls_doctitle, ls_doccontent
  1550. ll_mxbt = 1
  1551. uo_phone_push uo_push
  1552. uo_push = Create uo_phone_push
  1553. If ARG_SORT = -1 Then //归档
  1554. Long ls_dtype,ls_billid,ls_powerid,ls_scid
  1555. Select dtype,billid,powerid,scid
  1556. Into :ls_dtype,:ls_billid,:ls_powerid,:ls_scid
  1557. From oa_doc
  1558. Where docID = :ARG_DOCID Using ins_tran;
  1559. If ins_tran.SQLCode <> 0 Then
  1560. RSLT = 0
  1561. ARG_MSG = '查询公文ID失败1>>'+ins_tran.SQLErrText
  1562. Goto EXT
  1563. End If
  1564. Update oa_doc
  1565. Set docflag = 11,
  1566. fnsdt = getdate(),
  1567. fnsemp = :publ_operator,
  1568. rowid = rowid + 1
  1569. Where docID = :ARG_DOCID;
  1570. If ins_tran.SQLCode <> 0 Then
  1571. RSLT = 0
  1572. ARG_MSG = '更新公文ID失败1>>'+ins_tran.SQLErrText
  1573. Goto EXT
  1574. End If
  1575. Update oa_doc_flow
  1576. Set read_flag = 0
  1577. Where docID = :ARG_DOCID And rowid = 1;
  1578. If ins_tran.SQLCode <> 0 Then
  1579. RSLT = 0
  1580. ARG_MSG = '更新公文为未读失败1>>'+ins_tran.SQLErrText
  1581. Goto EXT
  1582. End If
  1583. If ls_dtype = 1 Then
  1584. If opt_audit(ls_powerid,ls_scid, ls_billid, False,ARG_MSG) = 0 Then
  1585. RSLT = 0
  1586. ARG_MSG = '审批单据操作失败>>'+ARG_MSG
  1587. Goto EXT
  1588. End If
  1589. End If
  1590. Else
  1591. Update oa_doc
  1592. Set rowid = rowid + 1 ,flowsort = :arg_sort
  1593. Where docID = :ARG_DOCID Using ins_tran;
  1594. If ins_tran.SQLCode <> 0 Then
  1595. ARG_MSG = '更新公文ID失败2>>'+ins_tran.SQLErrText
  1596. RSLT = 0
  1597. Goto EXT
  1598. End If
  1599. Update oa_doc_flow
  1600. Set oa_doc_flow.read_flag = 0,
  1601. oa_doc_flow.limittime = DATEADD(hh, oa_doc_flow.limithour, getdate())
  1602. From oa_doc_flow Inner JOIN
  1603. oa_doc ON oa_doc_flow.Docid = oa_doc.docID And oa_doc_flow.rowid = oa_doc.rowid
  1604. Where (oa_doc_flow.docID = :ARG_DOCID);
  1605. If ins_tran.SQLCode <> 0 Then
  1606. RSLT = 0
  1607. ARG_MSG = '更新公文为未读失败2>>'+ins_tran.SQLErrText
  1608. Goto EXT
  1609. End If
  1610. Declare cur_emp Cursor For
  1611. Select Empid
  1612. From oa_doc_flow
  1613. Where (flowsort = :arg_sort)
  1614. And (docID = :ARG_DOCID) Using ins_tran;
  1615. Open cur_emp ;
  1616. Fetch cur_emp Into :ll_empid_arr[ll_mxbt];
  1617. Do While ins_tran.SQLCode = 0
  1618. ll_mxbt++
  1619. Fetch cur_emp Into :ll_empid_arr[ll_mxbt];
  1620. Loop
  1621. Close cur_emp;
  1622. ll_mxbt = ll_mxbt - 1
  1623. If ll_mxbt > 0 Then
  1624. Select doctitle,doccontent
  1625. Into :ls_doctitle,:ls_doccontent
  1626. From oa_doc
  1627. Where oa_doc.docID = :ARG_DOCID Using ins_tran;
  1628. If ins_tran.SQLCode <> 0 Then
  1629. RSLT = 0
  1630. ARG_MSG = '发送手机推送失败(查询公文信息失败)>>'+ins_tran.SQLErrText
  1631. Goto EXT
  1632. End If
  1633. If uo_push.uf_add(ll_empid_arr, ls_doctitle, ls_doccontent, 'oatome', String(ARG_DOCID), ll_pushid, ARG_MSG, False) <> 1 Then
  1634. RSLT = 0
  1635. Goto EXT
  1636. End If
  1637. End If
  1638. End If
  1639. EXT:
  1640. If RSLT = 0 Then
  1641. Rollback Using ins_tran;
  1642. ElseIf arg_ifcommit And RSLT = 1 Then
  1643. Commit Using ins_tran;
  1644. End If
  1645. Destroy uo_push
  1646. Return RSLT
  1647. end function
  1648. public function integer p_add_oa_flow (long arg_docid, long arg_empid, long arg_rowid, long arg_colomnid, long arg_flowsort, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt
  1649. IF IsNull(arg_docid) THEN arg_docid = 0
  1650. IF IsNull(arg_empid) THEN arg_empid = 0
  1651. IF IsNull(arg_rowid) THEN arg_rowid = 0
  1652. IF IsNull(arg_colomnid) THEN arg_colomnid = 0
  1653. IF IsNull(arg_flowsort) THEN arg_flowsort = 0
  1654. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  1655. IF arg_docid <= 0 THEN
  1656. rslt = 0
  1657. arg_msg = '错误的公文唯一码'
  1658. GOTO ext
  1659. END IF
  1660. cnt = 0
  1661. SELECT count(*)
  1662. INTO :cnt
  1663. FROM u_user
  1664. Where empid = :arg_empid USING ins_tran;
  1665. IF ins_tran.SQLCode <> 0 THEN
  1666. rslt = 0
  1667. arg_msg = '查询操作失败:'+ins_tran.SQLErrText
  1668. GOTO ext
  1669. END IF
  1670. IF cnt <= 0 THEN
  1671. rslt = 0
  1672. arg_msg = '错误的人员唯一码'
  1673. GOTO ext
  1674. END IF
  1675. INSERT INTO oa_doc_flow
  1676. (
  1677. Docid,
  1678. Empid,
  1679. rowid,
  1680. columnid,
  1681. flowsort,
  1682. dscrp
  1683. )
  1684. VALUES
  1685. (
  1686. :arg_docid,
  1687. :arg_empid,
  1688. :arg_rowid,
  1689. :arg_colomnid,
  1690. :arg_flowsort,
  1691. :arg_dscrp
  1692. );
  1693. IF sqlca.SQLCode <> 0 THEN
  1694. arg_msg = "公文新建失败,请重试!"+'~n'+sqlca.SQLErrText
  1695. rslt = 0
  1696. GOTO ext
  1697. END IF
  1698. UPDATE oa_doc
  1699. SET rowid = :arg_rowid,flowsort = :arg_flowsort
  1700. Where Docid = :arg_docid USING ins_tran;
  1701. IF ins_tran.SQLCode <> 0 THEN
  1702. arg_msg = '更新公文ID失败2>>'+ins_tran.SQLErrText
  1703. rslt = 0
  1704. GOTO ext
  1705. END IF
  1706. ext:
  1707. IF rslt = 0 THEN
  1708. ROLLBACK USING ins_tran;
  1709. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1710. COMMIT USING ins_tran;
  1711. END IF
  1712. RETURN rslt
  1713. end function
  1714. public function integer uof_doc_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1715. Long i
  1716. Int ll_docflag
  1717. Long ls_colomnid
  1718. If IsNull(arg_s_oaflow_step.docid) Then arg_s_oaflow_step.docid = 0
  1719. If IsNull(arg_s_oaflow_step.flowstepname) Then arg_s_oaflow_step.flowstepname = ''
  1720. If IsNull(arg_s_oaflow_step.flowsort) Then arg_s_oaflow_step.flowsort = 0
  1721. If IsNull(arg_s_oaflow_step.flowempstr) Then arg_s_oaflow_step.flowempstr = ''
  1722. If IsNull(arg_s_oaflow_step.flowinfo) Then arg_s_oaflow_step.flowinfo = ''
  1723. If IsNull(arg_s_oaflow_step.limithour) Then arg_s_oaflow_step.limithour = 0
  1724. If IsNull(arg_s_oaflow_step.ifnecessary) Then arg_s_oaflow_step.ifnecessary = 0
  1725. If IsNull(arg_s_oaflow_step.ifjoin) Then arg_s_oaflow_step.ifjoin = 0
  1726. If IsNull(arg_s_oaflow_step.ifmod_relqty) Then arg_s_oaflow_step.ifmod_relqty = 0
  1727. If IsNull(arg_s_oaflow_step.ifmodfj) Then arg_s_oaflow_step.ifmodfj = 1
  1728. If arg_s_oaflow_step.docid = 0 Then
  1729. arg_msg = '错误的公文id,请检查'
  1730. rslt = 0
  1731. Goto ext
  1732. End If
  1733. If arg_s_oaflow_step.flowstepname = '' Then
  1734. arg_msg = '请输入步骤名称'
  1735. rslt = 0
  1736. Goto ext
  1737. End If
  1738. If arg_s_oaflow_step.flowsort = 0 Then
  1739. arg_msg = '请输入步骤'
  1740. rslt = 0
  1741. Goto ext
  1742. End If
  1743. If arg_s_oaflow_step.flowempstr = '' Then
  1744. arg_msg = '请设置相关人员'
  1745. rslt = 0
  1746. Goto ext
  1747. End If
  1748. If UpperBound(arg_s_oaflow_step.empid) = 0 Then
  1749. arg_msg = '请选择相关人员'
  1750. rslt = 0
  1751. Goto ext
  1752. End If
  1753. If IsNull(arg_s_oaflow_step.rowid) Then arg_s_oaflow_step.rowid = 0
  1754. Select docflag Into :ll_docflag
  1755. From oa_doc
  1756. Where docid = :arg_s_oaflow_step.docid Using ins_tran;
  1757. If ins_tran.SQLCode <> 0 Then
  1758. arg_msg = '查询公文信息失败>>'+ins_tran.SQLErrText
  1759. rslt = 0
  1760. Goto ext
  1761. End If
  1762. Insert Into oa_doc_step
  1763. ( docid,
  1764. flowstepname,
  1765. flowsort,
  1766. flowempstr,
  1767. flowinfo,
  1768. limithour,
  1769. modemp,
  1770. moddate,
  1771. ifnecessary,
  1772. ifjoin,
  1773. ifmod_relqty,
  1774. ifmodfj)
  1775. Values(
  1776. :arg_s_oaflow_step.docid,
  1777. :arg_s_oaflow_step.flowstepname,
  1778. :arg_s_oaflow_step.flowsort,
  1779. :arg_s_oaflow_step.flowempstr,
  1780. :arg_s_oaflow_step.flowinfo,
  1781. :arg_s_oaflow_step.limithour,
  1782. :publ_operator,
  1783. getdate(),
  1784. :arg_s_oaflow_step.ifnecessary,
  1785. :arg_s_oaflow_step.ifjoin,
  1786. :arg_s_oaflow_step.ifmod_relqty,
  1787. :arg_s_oaflow_step.ifmodfj);
  1788. If sqlca.SQLCode <> 0 Then
  1789. rslt = 0
  1790. arg_msg = '新增步骤操作失败,'+sqlca.SQLErrText
  1791. Goto ext
  1792. End If
  1793. For i = 1 To UpperBound(arg_s_oaflow_step.empid)
  1794. Insert Into oa_doc_stepemp
  1795. (docid,
  1796. flowsort,
  1797. empid)
  1798. Values(
  1799. :arg_s_oaflow_step.docid,
  1800. :arg_s_oaflow_step.flowsort,
  1801. :arg_s_oaflow_step.empid[i]);
  1802. If sqlca.SQLCode <> 0 Then
  1803. rslt = 0
  1804. arg_msg = '新增步骤操作失败,'+sqlca.SQLErrText
  1805. Goto ext
  1806. End If
  1807. Next
  1808. //如果是在进行公文增加流程,需要把数据增加到 oa_doc_flow
  1809. If ll_docflag <> 0 And arg_s_oaflow_step.rowid > 0 Then
  1810. ls_colomnid = 0
  1811. For i = 1 To UpperBound(arg_s_oaflow_step.empid)
  1812. ls_colomnid++
  1813. Insert Into oa_doc_flow
  1814. (
  1815. Docid,
  1816. Empid,
  1817. rowid,
  1818. columnid,
  1819. flowsort,
  1820. dscrp,
  1821. limithour,
  1822. modemp,
  1823. moddate
  1824. )
  1825. Values
  1826. (
  1827. :arg_s_oaflow_step.docid,
  1828. :arg_s_oaflow_step.empid[i],
  1829. :arg_s_oaflow_step.rowid,
  1830. :ls_colomnid,
  1831. :arg_s_oaflow_step.flowsort,
  1832. '',
  1833. :arg_s_oaflow_step.limithour,
  1834. :publ_operator,
  1835. getdate()
  1836. ) Using ins_tran ;
  1837. If ins_tran.SQLCode <> 0 Then
  1838. arg_msg = "插入审核人员列表失败!"+'~n'+ins_tran.SQLErrText
  1839. rslt = 0
  1840. Goto ext
  1841. End If
  1842. Next
  1843. End If
  1844. ext:
  1845. If rslt = 0 Then
  1846. Rollback using ins_tran;
  1847. ElseIf rslt = 1 And arg_ifcommit Then
  1848. Commit using ins_tran;
  1849. End If
  1850. Return rslt
  1851. end function
  1852. public function integer uof_get_flow_annex (long arg_flowid, ref s_oa_doc_annex arg_s_oda[]);Long doc_row
  1853. String ls_flowstepname[],ls_nextstep[],ls_flowempstr[]
  1854. Long ls_flowsort[]
  1855. Long i,ll_i,ll_row,ll_if_rivet
  1856. s_oa_doc_annex s_oda[]
  1857. i = 1
  1858. DECLARE cur_mx CURSOR FOR
  1859. SELECT Filename, Fileblob, Filetype, annextype,
  1860. IFDOWNFJ, IFLOOKFJ, Filesize
  1861. FROM oa_flow_annex
  1862. Where oa_flow_annex.flowid = :arg_flowid;
  1863. OPEN cur_mx;
  1864. FETCH cur_mx INTO :s_oda[i].FileName,
  1865. :s_oda[i].FileBlob,
  1866. :s_oda[i].Filetype,
  1867. :s_oda[i].annextype,
  1868. :s_oda[i].IFDOWNFJ,
  1869. :s_oda[i].IFLOOKFJ,
  1870. :s_oda[i].Filesize;
  1871. DO WHILE sqlca.SQLCode = 0
  1872. i++
  1873. FETCH cur_mx INTO :s_oda[i].FileName,
  1874. :s_oda[i].FileBlob,
  1875. :s_oda[i].FileType,
  1876. :s_oda[i].annextype,
  1877. :s_oda[i].IFDOWNFJ,
  1878. :s_oda[i].IFLOOKFJ,
  1879. :s_oda[i].Filesize;
  1880. LOOP
  1881. CLOSE cur_mx;
  1882. arg_s_oda = s_oda
  1883. RETURN 1
  1884. end function
  1885. public function integer set_read (long arg_docid, long arg_empid, long arg_read_flag);Int rslt = 1
  1886. Long ll_rowid, ll_docflag, ll_empid
  1887. SELECT rowid, docflag, empid
  1888. INTO :ll_rowid, :ll_docflag, :ll_empid
  1889. FROM oa_doc
  1890. Where docid = :arg_docid Using ins_tran;
  1891. IF ins_tran.SQLCode <> 0 THEN
  1892. rslt = 0
  1893. GOTO ext
  1894. END IF
  1895. IF ll_docflag = 11 OR ll_empid = arg_empid THEN
  1896. ll_rowid = 1
  1897. END IF
  1898. UPDATE oa_doc_flow
  1899. SET read_flag = :arg_read_flag
  1900. WHERE docid = :arg_docid
  1901. AND rowid = :ll_rowid
  1902. AND empid = :arg_empid
  1903. Using ins_tran;
  1904. IF ins_tran.SQLCode <> 0 THEN
  1905. rslt = 0
  1906. GOTO ext
  1907. END IF
  1908. IF ins_tran.SQLNRows <= 0 THEN
  1909. rslt = 0
  1910. END IF
  1911. ext:
  1912. IF rslt = 1 THEN
  1913. COMMIT Using ins_tran;
  1914. ELSE
  1915. ROLLBACK Using ins_tran;
  1916. END IF
  1917. RETURN rslt
  1918. end function
  1919. public function integer opt_caudit (long arg_powerid, long arg_type, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg, string arg_empcontent);Long rslt = 1
  1920. String ls_code,ls_opemp,ls_relcode
  1921. //arg_type 0 - 逆操作 1 - 反对
  1922. IF arg_billid <= 0 THEN
  1923. rslt = 0
  1924. arg_msg = '错误的单据唯一码'
  1925. GOTO ext
  1926. END IF
  1927. CHOOSE CASE arg_powerid
  1928. CASE 6,1324 //'销售订单审核'
  1929. uo_saletask obj_saletask
  1930. obj_saletask = Create uo_saletask
  1931. obj_saletask.commit_transaction = sqlca
  1932. obj_saletask.audit_buildtype = 1
  1933. IF arg_type = 0 THEN
  1934. IF obj_saletask.cancelpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1935. rslt = 0
  1936. GOTO ext
  1937. END IF
  1938. ELSE
  1939. IF obj_saletask.canceloapermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1940. rslt = 0
  1941. GOTO ext
  1942. END IF
  1943. END IF
  1944. Destroy obj_saletask
  1945. //日志
  1946. SELECT u_saletask.taskcode,u_saletask.opemp,u_saletask.relcode
  1947. INTO :ls_code,:ls_opemp,:ls_relcode
  1948. FROM u_saletask
  1949. Where u_saletask.scid = :arg_Scid And u_saletask.taskid = :arg_billid Using sqlca;
  1950. IF sqlca.SQLCode <> 0 THEN
  1951. rslt = 0
  1952. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  1953. GOTO ext
  1954. END IF
  1955. f_setsysoplog('销售订单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  1956. CASE 94,1277,4299 //'采购'
  1957. uo_buytask obj_buytask
  1958. obj_buytask = Create uo_buytask
  1959. obj_buytask.commit_transaction = sqlca
  1960. obj_buytask.audit_buildtype = 1
  1961. IF arg_type = 0 THEN
  1962. IF obj_buytask.cancelpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1963. rslt = 0
  1964. GOTO ext
  1965. ELSE
  1966. IF obj_buytask.cancelsecpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1967. rslt = 0
  1968. GOTO ext
  1969. END IF
  1970. END IF
  1971. ELSE
  1972. IF obj_buytask.cancelsecpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1973. rslt = 0
  1974. GOTO ext
  1975. END IF
  1976. END IF
  1977. Destroy obj_buytask
  1978. //日志
  1979. SELECT u_buytask.taskcode,u_buytask.opemp,u_buytask.relcode
  1980. INTO :ls_code,:ls_opemp,:ls_relcode
  1981. FROM u_buytask
  1982. Where u_buytask.scid = :arg_Scid And u_buytask.taskid = :arg_billid Using sqlca;
  1983. IF sqlca.SQLCode <> 0 THEN
  1984. rslt = 0
  1985. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  1986. GOTO ext
  1987. END IF
  1988. f_setsysoplog('采购订单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  1989. CASE 36,1138
  1990. uo_order_ml uo_order
  1991. uo_order = Create uo_order_ml
  1992. uo_order.audit_buildtype = 1
  1993. IF arg_type = 0 THEN
  1994. IF uo_order.c_sec_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1995. rslt = 0
  1996. GOTO ext
  1997. ELSE
  1998. IF uo_order.c_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  1999. rslt = 0
  2000. GOTO ext
  2001. END IF
  2002. END IF
  2003. ELSE
  2004. IF uo_order.c_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  2005. rslt = 0
  2006. GOTO ext
  2007. END IF
  2008. END IF
  2009. Destroy uo_order
  2010. //日志
  2011. SELECT u_order_ml.ordercode,u_order_ml.opemp,u_order_ml.relcode
  2012. INTO :ls_code,:ls_opemp,:ls_relcode
  2013. FROM u_order_ml
  2014. Where u_order_ml.scid = :arg_Scid And u_order_ml.orderid = :arg_billid Using sqlca;
  2015. IF sqlca.SQLCode <> 0 THEN
  2016. rslt = 0
  2017. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  2018. GOTO ext
  2019. END IF
  2020. IF arg_powerid = 36 THEN
  2021. f_setsysoplog('生产计划','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  2022. ELSE
  2023. f_setsysoplog('生产指令单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  2024. END IF
  2025. CASE 461
  2026. uo_quote uo_qu
  2027. uo_qu = Create uo_quote
  2028. uo_qu.commit_transaction = sqlca
  2029. IF arg_type = 0 THEN
  2030. IF uo_qu.cancelsecaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  2031. rslt = 0
  2032. GOTO ext
  2033. ELSE
  2034. IF uo_qu.cancelaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  2035. rslt = 0
  2036. GOTO ext
  2037. END IF
  2038. END IF
  2039. ELSE
  2040. IF uo_qu.cancelaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN
  2041. rslt = 0
  2042. GOTO ext
  2043. END IF
  2044. END IF
  2045. Destroy uo_qu
  2046. //日志
  2047. SELECT u_quote.quotecode,u_quote.opemp,u_quote.relcode
  2048. INTO :ls_code,:ls_opemp,:ls_relcode
  2049. FROM u_quote
  2050. Where u_quote.scid = :arg_Scid And u_quote.quoteid = :arg_billid Using sqlca;
  2051. IF sqlca.SQLCode <> 0 THEN
  2052. rslt = 0
  2053. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  2054. GOTO ext
  2055. END IF
  2056. f_setsysoplog('销售报价单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  2057. CASE 1684,2234
  2058. uo_sptcheck uo_check
  2059. uo_check = Create uo_sptcheck
  2060. uo_check.audit_buildtype = 1
  2061. IF arg_type = 0 THEN
  2062. IF uo_check.caudit(arg_billid,arg_msg,False) = 0 THEN
  2063. rslt = 0
  2064. GOTO ext
  2065. ELSE
  2066. IF uo_check.first_caudit(arg_billid,arg_msg,False) = 0 THEN
  2067. rslt = 0
  2068. GOTO ext
  2069. END IF
  2070. END IF
  2071. ELSE
  2072. IF uo_check.first_caudit(arg_billid,arg_msg,False) = 0 THEN
  2073. rslt = 0
  2074. GOTO ext
  2075. END IF
  2076. END IF
  2077. Destroy uo_check
  2078. SELECT u_sptcheck.billcode,u_sptcheck.opemp,u_sptcheck.relcode
  2079. INTO :ls_code,:ls_opemp,:ls_relcode
  2080. FROM u_sptcheck
  2081. Where u_sptcheck.billid = :arg_billid Using sqlca;
  2082. IF sqlca.SQLCode <> 0 THEN
  2083. rslt = 0
  2084. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  2085. GOTO ext
  2086. END IF
  2087. IF arg_powerid = 1684 THEN
  2088. f_setsysoplog('供应商采购质检单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  2089. ELSE
  2090. f_setsysoplog('供应商外协质检单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False)
  2091. END IF
  2092. CASE 1494
  2093. uo_workprice_change uo_workprice
  2094. uo_workprice = Create uo_workprice_change
  2095. uo_workprice.audit_buildtype = 1
  2096. uo_workprice.oppreason = arg_empcontent
  2097. IF uo_workprice.c_priceaudit(arg_billid,arg_msg,False) = 0 THEN
  2098. rslt = 0
  2099. GOTO ext
  2100. END IF
  2101. Destroy uo_workprice
  2102. SELECT billcode,opemp,relcode
  2103. INTO :ls_code,:ls_opemp,:ls_relcode
  2104. FROM u_workprice_change
  2105. Where u_workprice_change.billid = :arg_billid Using sqlca;
  2106. IF sqlca.SQLCode <> 0 THEN
  2107. rslt = 0
  2108. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  2109. GOTO ext
  2110. END IF
  2111. f_setsysoplog('工价表变更单','工价表单变更单反确认,ID:'+String(arg_billid)+',code:'+ls_code,arg_msg,False)
  2112. CASE 2404
  2113. uo_price_order uo_price
  2114. uo_price = Create uo_price_order
  2115. uo_price.audit_buildtype = 1
  2116. IF arg_type = 0 THEN
  2117. IF uo_price.csecaudit(arg_billid,False,arg_msg) = 0 THEN
  2118. rslt = 0
  2119. GOTO ext
  2120. ELSE
  2121. IF uo_price.caudit(arg_billid,False,arg_msg) = 0 THEN
  2122. rslt = 0
  2123. GOTO ext
  2124. END IF
  2125. END IF
  2126. ELSE
  2127. IF uo_price.caudit(arg_billid,False,arg_msg) = 0 THEN
  2128. rslt = 0
  2129. GOTO ext
  2130. END IF
  2131. END IF
  2132. Destroy uo_price
  2133. SELECT pocode INTO :ls_code
  2134. FROM u_price_order
  2135. Where u_price_order.poid = :arg_billid;
  2136. IF sqlca.SQLCode <> 0 THEN
  2137. rslt = 0
  2138. arg_msg = '查询操作失败:'+sqlca.SQLErrText
  2139. GOTO ext
  2140. END IF
  2141. f_setsysoplog('高级价格策略','高级价格策略撤审,ID:'+String(arg_billid)+',code:'+ls_code,arg_msg,False)
  2142. CASE 4174
  2143. uo_requestbuy uo_rqbuy
  2144. uo_rqbuy = Create uo_requestbuy
  2145. uo_rqbuy.audit_buildtype = 1
  2146. IF arg_type = 0 THEN
  2147. IF uo_rqbuy.caudit_2(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN
  2148. rslt = 0
  2149. GOTO ext
  2150. ELSE
  2151. IF uo_rqbuy.caudit(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN
  2152. rslt = 0
  2153. GOTO ext
  2154. END IF
  2155. END IF
  2156. ELSE
  2157. IF uo_rqbuy.caudit(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN
  2158. rslt = 0
  2159. GOTO ext
  2160. END IF
  2161. END IF
  2162. Destroy uo_rqbuy
  2163. END CHOOSE
  2164. ext:
  2165. IF rslt = 0 THEN
  2166. ROLLBACK Using ins_tran;
  2167. ELSEIF arg_ifcommit And rslt = 1 THEN
  2168. COMMIT Using ins_tran;
  2169. END IF
  2170. RETURN rslt
  2171. end function
  2172. public function integer p_gree (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp);//流转
  2173. Long rslt = 1
  2174. Long ls_rowid,ls_empid
  2175. Long li_cnt
  2176. long ls_flowsort
  2177. SELECT rowid,flowsort
  2178. INTO :ls_rowid,:ls_flowsort
  2179. FROM oa_doc
  2180. Where docID = :arg_docid USING sqlca;
  2181. IF sqlca.SQLCode <> 0 THEN
  2182. arg_msg = '查询公文ID失败1>>'+sqlca.SQLErrText
  2183. rslt = 0
  2184. GOTO ext
  2185. END IF
  2186. SELECT empid
  2187. INTO :ls_empid
  2188. FROM u_user
  2189. Where Username = :publ_operator;
  2190. IF sqlca.SQLCode <> 0 THEN
  2191. arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText
  2192. rslt = 0
  2193. GOTO ext
  2194. END IF
  2195. DateTime server_dt
  2196. SELECT Top 1 getdate() INTO :server_dt FROM u_user USING sqlca ;
  2197. //取得系统时间,借用操作员表
  2198. IF sqlca.SQLCode <> 0 THEN
  2199. rslt = 0
  2200. arg_msg = "查询操作失败,日期 "
  2201. GOTO ext
  2202. END IF
  2203. IF ls_flowsort <> 0 THEN
  2204. UPDATE oa_doc_flow
  2205. SET Passed = 1,Empcontent = :arg_empcontent,greetime = :server_dt
  2206. WHERE docid = :arg_docid
  2207. AND (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 )
  2208. AND rowid = :ls_rowid
  2209. AND Passed = 0 USING sqlca;
  2210. IF sqlca.SQLCode <> 0 THEN
  2211. arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText
  2212. rslt = 0
  2213. GOTO ext
  2214. END IF
  2215. ELSEIF ls_flowsort = 0 THEN
  2216. UPDATE oa_doc_flow
  2217. SET Passed = 1,Empcontent = '发起通过',greetime = :server_dt
  2218. WHERE docid = :arg_docid
  2219. AND (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 )
  2220. AND rowid = 1 AND Passed = 0 USING sqlca;
  2221. IF sqlca.SQLCode <> 0 THEN
  2222. arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText
  2223. rslt = 0
  2224. GOTO ext
  2225. END IF
  2226. END IF
  2227. ext:
  2228. IF rslt = 0 THEN
  2229. ROLLBACK USING ins_tran;
  2230. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2231. COMMIT USING ins_tran;
  2232. END IF
  2233. RETURN rslt
  2234. end function
  2235. public function integer p_oppose (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp);
  2236. Long rslt = 1
  2237. Long ls_rowid,ls_empid
  2238. Long ls_flowsort
  2239. Long ll_dtype,ll_scid,ll_billid,ll_powerid
  2240. SELECT rowid,flowsort,dtype,scid,billid,powerid
  2241. INTO :ls_rowid,:ls_flowsort,:ll_dtype,:ll_scid,:ll_billid,:ll_powerid
  2242. FROM oa_doc
  2243. Where docID = :arg_docid Using ins_tran;
  2244. IF ins_tran.SQLCode <> 0 THEN
  2245. arg_msg = '查询公文ID失败1>>'+ins_tran.SQLErrText
  2246. rslt = 0
  2247. GOTO ext
  2248. END IF
  2249. SELECT empid INTO :ls_empid
  2250. FROM u_user
  2251. Where username = :publ_operator;
  2252. IF ins_tran.SQLCode <> 0 THEN
  2253. arg_msg = '查询用户ID失败>>'+ins_tran.SQLErrText
  2254. rslt = 0
  2255. GOTO ext
  2256. END IF
  2257. UPDATE oa_doc
  2258. SET docflag = 2,flowsort = 0,rowid = 1
  2259. Where docID = :arg_docid;
  2260. IF ins_tran.SQLCode <> 0 THEN
  2261. arg_msg = '查询公文ID失败>>'+ins_tran.SQLErrText
  2262. rslt = 0
  2263. GOTO ext
  2264. END IF
  2265. UPDATE oa_doc_flow
  2266. SET Passed = 2,Empcontent = :arg_empcontent
  2267. WHERE docid = :arg_docid AND
  2268. rowid = :ls_rowid AND
  2269. flowsort = :ls_flowsort AND
  2270. (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 );
  2271. IF ins_tran.SQLCode <> 0 THEN
  2272. arg_msg = '查询公文ID失败>>'+ins_tran.SQLErrText
  2273. rslt = 0
  2274. GOTO ext
  2275. END IF
  2276. UPDATE oa_doc_flow
  2277. SET read_flag = 0
  2278. Where docID = :arg_docid And rowid = 1;
  2279. IF ins_tran.SQLCode <> 0 THEN
  2280. rslt = 0
  2281. arg_msg = '更新公文为未读失败>>'+ins_tran.SQLErrText
  2282. GOTO ext
  2283. END IF
  2284. IF ll_dtype = 1 THEN
  2285. IF opt_caudit(ll_powerid,1,ll_scid, ll_billid, False,arg_msg,arg_empcontent) = 0 THEN
  2286. rslt = 0
  2287. GOTO ext
  2288. END IF
  2289. END IF
  2290. ext:
  2291. IF rslt = 0 THEN
  2292. ROLLBACK Using ins_tran;
  2293. ELSEIF arg_ifcommit And rslt = 1 THEN
  2294. COMMIT Using ins_tran;
  2295. END IF
  2296. RETURN rslt
  2297. end function
  2298. public function integer uof_doc_stepdel (long arg_docid, long arg_flowsort, integer arg_deltype, ref string arg_msg, boolean arg_ifcommit);//arg_deltype 0 - 修改(删除原数据然后插入新数据,不需要更新后面步骤rowid) 1 - 删除(需要更新后面步骤的rowid)
  2299. Int rslt = 1
  2300. If IsNull(arg_docid) Then arg_docid = 0
  2301. If IsNull(arg_flowsort) Then arg_flowsort = 0
  2302. If arg_docid = 0 Then
  2303. arg_msg = '错误的公文id,请检查'
  2304. rslt = 0
  2305. Goto ext
  2306. End If
  2307. If arg_flowsort = 0 Then
  2308. arg_msg = '请错误的步骤,请检查'
  2309. rslt = 0
  2310. Goto ext
  2311. End If
  2312. Delete From oa_doc_stepemp
  2313. Where docid = :arg_docid
  2314. And flowsort = :arg_flowsort Using ins_tran;
  2315. If ins_tran.SQLCode <> 0 Then
  2316. rslt = 0
  2317. arg_msg = '删除步骤人员操作失败,'+ins_tran.SQLErrText
  2318. Goto ext
  2319. End If
  2320. Delete From oa_doc_step
  2321. Where docid = :arg_docid
  2322. And flowsort = :arg_flowsort using ins_tran;
  2323. If ins_tran.SQLCode <> 0 Then
  2324. rslt = 0
  2325. arg_msg = '删除步骤操作失败,'+ins_tran.SQLErrText
  2326. Goto ext
  2327. End If
  2328. Delete From oa_doc_flow
  2329. Where docid = :arg_docid
  2330. And flowsort = :arg_flowsort using ins_tran;
  2331. If ins_tran.SQLCode <> 0 Then
  2332. rslt = 0
  2333. arg_msg = '删除审批人员列表操作失败,'+ins_tran.SQLErrText
  2334. Goto ext
  2335. End If
  2336. //如果是直接删除步骤,后面的步骤的rowid要减1
  2337. If arg_deltype = 1 Then
  2338. Update oa_doc_flow
  2339. Set rowid = rowid - 1
  2340. Where docid = :arg_docid
  2341. And flowsort > :arg_flowsort using ins_tran;
  2342. If ins_tran.SQLCode <> 0 Then
  2343. rslt = 0
  2344. arg_msg = '更新后面步骤人员列表rowid操作失败,'+ins_tran.SQLErrText
  2345. Goto ext
  2346. End If
  2347. End If
  2348. ext:
  2349. If rslt = 0 Then
  2350. Rollback using ins_tran;
  2351. ElseIf rslt = 1 And arg_ifcommit Then
  2352. Commit using ins_tran;
  2353. End If
  2354. Return rslt
  2355. end function
  2356. public function integer uof_urge (long arg_docid, string arg_urgemsg, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2357. String ls_flowempstr
  2358. Int li_docflag
  2359. Long ll_rowid
  2360. String ls_opemp,ls_Doccode
  2361. Select oa_doc_step.flowempstr,
  2362. oa_doc.docflag,
  2363. oa_doc.rowid,
  2364. oa_doc.Opemp,
  2365. oa_doc.Doccode
  2366. Into :ls_flowempstr,
  2367. :li_docflag,
  2368. :ll_rowid,
  2369. :ls_opemp,
  2370. :ls_Doccode
  2371. From oa_doc Inner JOIN
  2372. oa_doc_step ON oa_doc.docID = oa_doc_step.docid And
  2373. oa_doc.flowsort = oa_doc_step.flowsort
  2374. Where oa_doc.docID = :arg_docid;
  2375. If sqlca.SQLCode <> 0 Then
  2376. rslt = 0
  2377. arg_msg = '查询公文信息失败,'+sqlca.SQLErrText
  2378. Goto ext
  2379. End If
  2380. If ls_opemp <> arg_emp Then
  2381. rslt = 0
  2382. arg_msg = '只有发起人才能执行催办功能'
  2383. Goto ext
  2384. End If
  2385. If li_docflag <> 1 Then
  2386. rslt = 0
  2387. arg_msg = '只有在进行的公文才能执行催办功能'
  2388. Goto ext
  2389. End If
  2390. Select Top 1 Replace(:ls_flowempstr, ',', ';')
  2391. Into :ls_flowempstr
  2392. From u_user;
  2393. If sqlca.SQLCode <> 0 Then
  2394. rslt = 0
  2395. arg_msg = '转换审批人至内部邮件收件人格式失败,'+sqlca.SQLErrText
  2396. Goto ext
  2397. End If
  2398. Update oa_doc_flow
  2399. Set urgeflag = 1,
  2400. urgeemp = :arg_emp,
  2401. urgedate = getdate(),
  2402. urgenum = urgenum + 1
  2403. Where docid = :arg_docid
  2404. And rowid = :ll_rowid;
  2405. If sqlca.SQLCode <> 0 Then
  2406. rslt = 0
  2407. arg_msg = '更新催办标记失败,'+sqlca.SQLErrText
  2408. Goto ext
  2409. End If
  2410. //发送内部邮件到被催办人员
  2411. uo_transmsg uo_msg
  2412. If uo_msg.f_create_admsg(sys_empid,arg_emp,ls_flowempstr,'公文催办:'+ls_Doccode,arg_urgemsg,arg_msg,0,ls_Doccode,False) = 0 Then
  2413. rslt = 0
  2414. arg_msg = '催办消息发送失败,'+arg_msg
  2415. Goto ext
  2416. End If
  2417. ext:
  2418. If rslt = 0 Then
  2419. Rollback;
  2420. ElseIf rslt = 1 And arg_ifcommit Then
  2421. Commit;
  2422. End If
  2423. Return rslt
  2424. end function
  2425. public function integer uof_disagree_back (long arg_docid, string arg_disagree_msg, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  2426. Long ll_rowid,ll_docflag,ll_empid,ll_cnt,ll_rowid_back,ll_flowsort
  2427. DateTime nulldate
  2428. String ls_flowempstr,ls_Doccode
  2429. SetNull(nulldate)
  2430. Select rowid,docflag,doccode
  2431. Into :ll_rowid ,:ll_docflag,:ls_Doccode
  2432. From oa_doc
  2433. Where docid = :arg_docid Using sqlca;
  2434. If sqlca.SQLCode <> 0 Then
  2435. arg_msg = '查询公文信息>>'+sqlca.SQLErrText
  2436. rslt = 0
  2437. Goto ext
  2438. End If
  2439. If ll_docflag <> 1 Then
  2440. rslt = 0
  2441. arg_msg = '公文不是在处理状态,不能否决上一步'
  2442. Goto ext
  2443. End If
  2444. If ll_rowid <= 1 Then
  2445. rslt = 0
  2446. arg_msg = '公文还没有人审批过,不能否决上一步'
  2447. Goto ext
  2448. End If
  2449. Select empid Into :ll_empid
  2450. From u_user
  2451. Where username = :publ_operator;
  2452. If sqlca.SQLCode <> 0 Then
  2453. arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText
  2454. rslt = 0
  2455. Goto ext
  2456. End If
  2457. ll_cnt = 0
  2458. Select count(*) Into :ll_cnt
  2459. From oa_doc_flow
  2460. Where oa_doc_flow.docid = :arg_docid And
  2461. oa_doc_flow.empid = :ll_empid And
  2462. oa_doc_flow.rowid = :ll_rowid;
  2463. If sqlca.SQLCode <> 0 Then
  2464. rslt = 0
  2465. arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText
  2466. Goto ext
  2467. End If
  2468. If ll_cnt = 0 Then
  2469. rslt = 0
  2470. arg_msg = '你不是当前审批人员,不能否决上一步'
  2471. Goto ext
  2472. End If
  2473. Select TOP 1 oa_doc_flow.rowid,oa_doc_flow.flowsort
  2474. Into :ll_rowid_back,:ll_flowsort
  2475. From oa_doc_flow
  2476. Where oa_doc_flow.docid = :arg_docid And
  2477. oa_doc_flow.passed = 1
  2478. Order By oa_doc_flow.rowid Desc Using sqlca;
  2479. If sqlca.SQLCode <> 0 Then
  2480. rslt = 0
  2481. arg_msg = '查询操作失败,查询上一步审批信息失败:'+sqlca.SQLErrText
  2482. Goto ext
  2483. End If
  2484. Update oa_doc_flow
  2485. Set limittime = :nulldate
  2486. Where docid = :arg_docid
  2487. And rowid = :ll_rowid;
  2488. If sqlca.SQLCode <> 0 Then
  2489. arg_msg = '清除当前审批限定时间失败>>'+sqlca.SQLErrText
  2490. rslt = 0
  2491. Goto ext
  2492. End If
  2493. Update oa_doc_flow
  2494. Set Passed = 0,
  2495. Empcontent = '',
  2496. greetime = :nulldate
  2497. Where docid = :arg_docid
  2498. And rowid = :ll_rowid_back;
  2499. If sqlca.SQLCode <> 0 Then
  2500. arg_msg = '否决上一步审批失败>>'+sqlca.SQLErrText
  2501. rslt = 0
  2502. Goto ext
  2503. End If
  2504. Update oa_doc
  2505. Set rowid = :ll_rowid_back,
  2506. flowsort = :ll_flowsort
  2507. Where docid = :arg_docid;
  2508. If sqlca.SQLCode <> 0 Then
  2509. arg_msg = '更新公文信息失败>>'+sqlca.SQLErrText
  2510. rslt = 0
  2511. Goto ext
  2512. End If
  2513. //发信息给上一步审批人员
  2514. uo_transmsg uo_msg
  2515. Select flowempstr
  2516. Into :ls_flowempstr
  2517. From oa_doc_step
  2518. Where docid = :arg_docid
  2519. And flowsort = :ll_flowsort;
  2520. If sqlca.SQLCode <> 0 Then
  2521. rslt = 0
  2522. arg_msg = '获取上一步审批人员信息失败,'+sqlca.SQLErrText
  2523. Goto ext
  2524. End If
  2525. Select Top 1 Replace(:ls_flowempstr, ',', ';')
  2526. Into :ls_flowempstr
  2527. From u_user;
  2528. If sqlca.SQLCode <> 0 Then
  2529. rslt = 0
  2530. arg_msg = '转换审批人至内部邮件收件人格式失败,'+sqlca.SQLErrText
  2531. Goto ext
  2532. End If
  2533. If uo_msg.f_create_admsg(sys_empid,publ_operator,ls_flowempstr,'公文审批否决,重新审批:'+ls_Doccode,arg_disagree_msg,arg_msg,0,ls_Doccode,False) = 0 Then
  2534. rslt = 0
  2535. arg_msg = '否决消息发送失败,'+arg_msg
  2536. Goto ext
  2537. End If
  2538. ext:
  2539. If rslt = 0 Then
  2540. Rollback;
  2541. ElseIf rslt = 1 And arg_ifcommit Then
  2542. Commit;
  2543. End If
  2544. Return rslt
  2545. end function
  2546. public function integer uof_clean_step (long arg_docid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit);//arg_flowsort 指定序号后的步骤清空
  2547. Int rslt = 1
  2548. If IsNull(arg_docid) Then arg_docid = 0
  2549. If IsNull(arg_flowsort) Then arg_flowsort = 0
  2550. If arg_docid = 0 Then
  2551. arg_msg = '错误的公文id,请检查'
  2552. rslt = 0
  2553. Goto ext
  2554. End If
  2555. Delete From oa_doc_stepemp
  2556. Where docid = :arg_docid
  2557. And flowsort > :arg_flowsort Using ins_tran;
  2558. If ins_tran.SQLCode <> 0 Then
  2559. rslt = 0
  2560. arg_msg = '删除步骤人员操作失败,'+ins_tran.SQLErrText
  2561. Goto ext
  2562. End If
  2563. Delete From oa_doc_step
  2564. Where docid = :arg_docid
  2565. And flowsort > :arg_flowsort using ins_tran;
  2566. If ins_tran.SQLCode <> 0 Then
  2567. rslt = 0
  2568. arg_msg = '删除步骤操作失败,'+ins_tran.SQLErrText
  2569. Goto ext
  2570. End If
  2571. Delete From oa_doc_flow
  2572. Where docid = :arg_docid
  2573. And flowsort > :arg_flowsort using ins_tran;
  2574. If ins_tran.SQLCode <> 0 Then
  2575. rslt = 0
  2576. arg_msg = '删除审批人员列表操作失败,'+ins_tran.SQLErrText
  2577. Goto ext
  2578. End If
  2579. ext:
  2580. If rslt = 0 Then
  2581. Rollback using ins_tran;
  2582. ElseIf rslt = 1 And arg_ifcommit Then
  2583. Commit using ins_tran;
  2584. End If
  2585. Return rslt
  2586. end function
  2587. public function integer uof_update_item (long arg_docid, long arg_printid, string arg_itemvalue, long arg_relid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2588. Update oa_doc_item
  2589. Set itemvalue = :arg_itemvalue,
  2590. relid = :arg_relid,
  2591. modemp = :publ_operator,
  2592. moddate = getdate()
  2593. Where docid = :arg_docid
  2594. And printid = :arg_printid Using ins_tran;
  2595. If ins_tran.SQLCode <> 0 Then
  2596. rslt = 0
  2597. arg_msg = '更新自定义字段失败,'+ins_tran.SQLErrText
  2598. Goto ext
  2599. End If
  2600. ext:
  2601. If rslt = 0 Then
  2602. Rollback Using ins_tran;
  2603. ElseIf rslt = 1 And arg_ifcommit Then
  2604. Commit Using ins_tran;
  2605. End If
  2606. Return rslt
  2607. end function
  2608. public function integer uof_update_relqty (long arg_docid, decimal arg_relqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2609. Update oa_doc
  2610. Set relqty = :arg_relqty
  2611. Where docid = :arg_docid Using ins_tran;
  2612. If ins_tran.SQLCode <> 0 Then
  2613. rslt = 0
  2614. arg_msg = '更新相关数值失败,'+ins_tran.SQLErrText
  2615. Goto ext
  2616. End If
  2617. ext:
  2618. If rslt = 0 Then
  2619. Rollback Using ins_tran;
  2620. ElseIf rslt = 1 And arg_ifcommit Then
  2621. Commit Using ins_tran;
  2622. End If
  2623. Return rslt
  2624. end function
  2625. on uo_oa_doc.create
  2626. call super::create
  2627. TriggerEvent( this, "constructor" )
  2628. end on
  2629. on uo_oa_doc.destroy
  2630. TriggerEvent( this, "destructor" )
  2631. call super::destroy
  2632. end on