$PBExportHeader$uo_ljmail_msg.sru forward global type uo_ljmail_msg from nonvisualobject end type type ps_cus_ljmail from structure within uo_ljmail_msg end type end forward type ps_cus_ljmail from structure long commid string ljmails[] end type global type uo_ljmail_msg from nonvisualobject end type global uo_ljmail_msg uo_ljmail_msg type variables Transaction commit_transaction //数据commit事务 end variables forward prototypes public function integer uf_save (ref s_ljmail_msg arg_s_msg, ref string arg_msg) public function integer uf_getinfo (long arg_msgid, ref s_ljmail_msg arg_s_msg, ref string arg_msg, boolean arg_if_main, boolean arg_if_mx, boolean arg_if_fj, boolean arg_if_withblob) public function integer uf_get_msgmx (string arg_ljmail, ref s_ljmail_msgmx arg_msgmx, ref string arg_msg) public function integer uf_del (long arg_msgid, ref string arg_msg) public function integer uf_get_boxtype (long arg_msgid, ref long arg_boxtype, ref string arg_msg) public function integer uf_get_html (long arg_msgid, ref string arg_html, ref string arg_msg) public function integer uf_send (long arg_msgid, ref string arg_msg) public function integer uf_getljmail (ref string arg_ljmail, ref string arg_msg) public function integer uf_rev_msg (string arg_id, ref string arg_msg) public function integer uf_setread (long arg_msgid, long arg_ifread, ref string arg_msg) end prototypes public function integer uf_save (ref s_ljmail_msg arg_s_msg, ref string arg_msg);Int rslt = 1 Long ll_i Boolean oldAutoCommit oldAutoCommit = commit_transaction.AutoCommit IF arg_s_msg.sendflag <> 2 And arg_s_msg.sendflag <> 3 THEN rslt = 0 arg_msg = '只能保存草稿与收件' GOTO ext END IF Long ll_cnt SELECT COUNT(0) INTO :ll_cnt FROM u_ljmail_box WHERE boxid = :arg_s_msg.boxid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询所属邮箱失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN rslt = 0 arg_msg = '所属邮箱不存在,ID:' + String(arg_s_msg.boxid) GOTO ext END IF DateTime dt_server SELECT TOP 1 GETDATE() INTO :dt_server FROM u_user Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '获取服务器时间失败,' + sqlca.SQLErrText GOTO ext END IF IF arg_s_msg.msgid = 0 THEN Long ll_msgid ll_msgid = f_sys_scidentity(0, "u_ljmail_msg", "msgid", arg_msg, True, id_sqlca) IF ll_msgid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_ljmail_msg(msgid, boxid, sendcomid, sendcomname, sendflag, opemp, opdate, subject, htmlbody, reltype, relid, ljmail) VALUES(:ll_msgid, :arg_s_msg.boxid, :arg_s_msg.sendcomid, :arg_s_msg.sendcomname, :arg_s_msg.sendflag, :publ_operator, :dt_server, :arg_s_msg.subject, :arg_s_msg.htmlbody, :arg_s_msg.reltype, :arg_s_msg.relid, :arg_s_msg.ljmail) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入LE邮件失败,' + commit_transaction.SQLErrText GOTO ext END IF // 插入接收明细 FOR ll_i = 1 To UpperBound(arg_s_msg.mx) INSERT INTO u_ljmail_msgmx(msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail) VALUES(:ll_msgid, :ll_i, :arg_s_msg.mx[ll_i].comid, :arg_s_msg.mx[ll_i].comname, :arg_s_msg.mx[ll_i].empid, :arg_s_msg.mx[ll_i].empname, :arg_s_msg.mx[ll_i].reltype, :arg_s_msg.mx[ll_i].relid, :arg_s_msg.mx[ll_i].ljmail) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入接收明细失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_s_msg.mx[ll_i].msgid = ll_msgid arg_s_msg.mx[ll_i].printid = ll_i NEXT // 插入附件 FOR ll_i = 1 To UpperBound(arg_s_msg.fj) INSERT INTO u_ljmail_fj(msgid, printid, filename) VALUES(:ll_msgid, :ll_i, :arg_s_msg.fj[ll_i].filename) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入LE附件失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_s_msg.fj[ll_i].msgid = ll_msgid arg_s_msg.fj[ll_i].printid = ll_i NEXT arg_s_msg.msgid = ll_msgid arg_s_msg.opemp = publ_operator arg_s_msg.opdate = dt_server ELSE UPDATE u_ljmail_msg SET boxid = :arg_s_msg.boxid, sendcomid = :arg_s_msg.sendcomid, sendcomname = :arg_s_msg.sendcomname, sendempid = :arg_s_msg.sendempid, sendempname = :arg_s_msg.sendempname, sendflag = :arg_s_msg.sendflag, modemp = :publ_operator, moddate = :dt_server, subject = :arg_s_msg.subject, htmlbody = :arg_s_msg.htmlbody, reltype = :arg_s_msg.reltype, relid = :arg_s_msg.relid, ljmail = :arg_s_msg.ljmail WHERE msgid = :arg_s_msg.msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新龙嘉邮件信息失败,' + commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_ljmail_msgmx WHERE msgid = :arg_s_msg.msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除旧龙嘉邮件明细失败,' + commit_transaction.SQLErrText GOTO ext END IF // 插入接收明细 FOR ll_i = 1 To UpperBound(arg_s_msg.mx) INSERT INTO u_ljmail_msgmx(msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail) VALUES(:arg_s_msg.msgid, :ll_i, :arg_s_msg.mx[ll_i].comid, :arg_s_msg.mx[ll_i].comname, :arg_s_msg.mx[ll_i].empid, :arg_s_msg.mx[ll_i].empname, :arg_s_msg.mx[ll_i].reltype, :arg_s_msg.mx[ll_i].relid, :arg_s_msg.mx[ll_i].ljmail) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入接收明细失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_s_msg.mx[ll_i].msgid = arg_s_msg.msgid arg_s_msg.mx[ll_i].printid = ll_i NEXT DELETE FROM u_ljmail_fj WHERE msgid = :arg_s_msg.msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除旧龙嘉邮件附件失败,' + commit_transaction.SQLErrText GOTO ext END IF // 插入附件 FOR ll_i = 1 To UpperBound(arg_s_msg.fj) INSERT INTO u_ljmail_fj(msgid, printid, filename) VALUES(:arg_s_msg.msgid, :ll_i, :arg_s_msg.fj[ll_i].filename) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入LE附件失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_s_msg.fj[ll_i].msgid = arg_s_msg.msgid arg_s_msg.fj[ll_i].printid = ll_i NEXT arg_s_msg.modemp = publ_operator arg_s_msg.moddate = dt_server END IF COMMIT Using commit_transaction; commit_transaction.AutoCommit = True FOR ll_i = 1 To UpperBound(arg_s_msg.fj) UpdateBlob u_ljmail_fj Set fileblob = :arg_s_msg.fj[ll_i].fileblob Where msgid = :arg_s_msg.msgid And printid = :arg_s_msg.fj[ll_i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新LE附件失败,' + commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF commit_transaction.AutoCommit = oldAutoCommit RETURN rslt end function public function integer uf_getinfo (long arg_msgid, ref s_ljmail_msg arg_s_msg, ref string arg_msg, boolean arg_if_main, boolean arg_if_mx, boolean arg_if_fj, boolean arg_if_withblob);Int rslt = 1 IF arg_if_main THEN SELECT boxid, sendcomid, sendcomname, sendempid, sendempname, sendflag, opemp, opdate, modemp, moddate, subject, htmlbody, reltype, relid, sendtime, ljmail, ifread INTO :arg_s_msg.boxid, :arg_s_msg.sendcomid, :arg_s_msg.sendcomname, :arg_s_msg.sendempid, :arg_s_msg.sendempname, :arg_s_msg.sendflag, :arg_s_msg.opemp, :arg_s_msg.opdate, :arg_s_msg.modemp, :arg_s_msg.moddate, :arg_s_msg.subject, :arg_s_msg.htmlbody, :arg_s_msg.reltype, :arg_s_msg.relid, :arg_s_msg.sendtime, :arg_s_msg.ljmail, :arg_s_msg.ifread FROM u_ljmail_msg WHERE msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询龙嘉邮件信息失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_s_msg.msgid = arg_msgid END IF Long ll_cnt = 0 s_ljmail_msgmx arr_mx[] Long mxl_msgid Long mxl_printid Long mxl_comid String mxs_comname Long mxl_empid String mxs_empname Long mxl_reltype Long mxl_relid String mxs_ljmail IF arg_if_mx THEN DECLARE cur1 CURSOR FOR SELECT msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail FROM u_ljmail_msgmx WHERE msgid = :arg_msgid Using commit_transaction; OPEN cur1; FETCH cur1 INTO :mxl_msgid, :mxl_printid, :mxl_comid, :mxs_comname, :mxl_empid, :mxs_empname, :mxl_reltype, :mxl_relid, :mxs_ljmail; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ arr_mx[ll_cnt].msgid = mxl_msgid arr_mx[ll_cnt].printid = mxl_printid arr_mx[ll_cnt].comid = mxl_comid arr_mx[ll_cnt].comname = mxs_comname arr_mx[ll_cnt].empid = mxl_empid arr_mx[ll_cnt].empname = mxs_empname arr_mx[ll_cnt].reltype = mxl_reltype arr_mx[ll_cnt].relid = mxl_relid arr_mx[ll_cnt].ljmail = mxs_ljmail FETCH cur1 INTO :mxl_msgid, :mxl_printid, :mxl_comid, :mxs_comname, :mxl_empid, :mxs_empname, :mxl_reltype, :mxl_relid, :mxs_ljmail; LOOP CLOSE cur1; arg_s_msg.mx = arr_mx END IF s_ljmail_fj arr_fj[] Long fjl_msgid Long fjl_printid String fjs_filename Blob fjb_fileblob Long i IF arg_if_fj THEN ll_cnt = 0 DECLARE cur2 CURSOR FOR SELECT msgid, printid, filename FROM u_ljmail_fj WHERE msgid = :arg_msgid Using commit_transaction; OPEN cur2; FETCH cur2 Into :fjl_msgid, :fjl_printid, :fjs_filename; DO WHILE commit_transaction.SQLCode = 0 ll_cnt++ arr_fj[ll_cnt].msgid = fjl_msgid arr_fj[ll_cnt].printid = fjl_printid arr_fj[ll_cnt].Filename = fjs_filename FETCH cur2 Into :fjl_msgid, :fjl_printid, :fjs_filename; LOOP CLOSE cur2; arg_s_msg.fj = arr_fj IF arg_if_withblob THEN FOR i = 1 To ll_cnt SelectBlob fileblob Into :arg_s_msg.fj[i].fileblob From u_ljmail_fj Where msgid = :arg_s_msg.fj[i].msgid And printid = :arg_s_msg.fj[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '获取附件内容失败,' + commit_transaction.SQLErrText GOTO ext END IF NEXT END IF END IF ext: RETURN rslt end function public function integer uf_get_msgmx (string arg_ljmail, ref s_ljmail_msgmx arg_msgmx, ref string arg_msg);Int rslt = 1 /* * 1: 客户 * 2: 供应商 * 3: 手动 * 4: 客户联系人 * 5: 供应商联系人 * 6: 员工 */ Long ll_pos ll_pos = Pos(arg_ljmail, '@@') IF ll_pos <= 0 THEN rslt = 0 arg_msg = '' GOTO ext END IF String ls_repname String ls_cuscode String ls_comname ls_repname = Mid(arg_ljmail, 1, ll_pos - 1) ls_cuscode = Mid(arg_ljmail, ll_pos + 2) Long ll_cnt Long ll_cusid Long ll_relid //==================================================================== // 客户 //==================================================================== SELECT top 1 cusid, cusname INTO :ll_cusid, :ls_comname FROM u_cust Where commcode = :ls_cuscode And ifecomm = 1; IF sqlca.SQLCode = 0 THEN SELECT count(0) INTO :ll_cnt FROM u_cust Where cusid = :ll_cusid And rep = :ls_repname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询客户联系人失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_cnt > 0 THEN arg_msgmx.reltype = 1 arg_msgmx.relid = ll_cusid arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname GOTO ext ELSE SELECT top 1 repid INTO :ll_relid FROM u_cust_rep Where cusid = :ll_cusid And repname = :ls_repname; IF sqlca.SQLCode = 0 THEN arg_msgmx.reltype = 4 arg_msgmx.relid = ll_relid arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname GOTO ext END IF END IF END IF //==================================================================== // 供应商 //==================================================================== Long ll_sptid SELECT top 1 sptid, name INTO :ll_sptid, :ls_comname FROM u_spt Where commcode = :ls_cuscode And ifecomm = 1; IF sqlca.SQLCode = 0 THEN SELECT count(0) INTO :ll_cnt FROM u_spt Where sptid = :ll_sptid And rep = :ls_repname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询供应商联系人失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_cnt > 0 THEN arg_msgmx.reltype = 2 arg_msgmx.relid = ll_sptid arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname GOTO ext ELSE SELECT top 1 repid INTO :ll_relid FROM u_spt_cus Where sptid = :ll_sptid And repname = :ls_repname; IF sqlca.SQLCode = 0 THEN arg_msgmx.reltype = 5 arg_msgmx.relid = ll_relid arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname GOTO ext END IF END IF END IF //==================================================================== // 员工 //==================================================================== Long ll_custype Long ll_commid ls_comname = '' SELECT top 1 CusCommID, CusType, CusName INTO :ll_commid, :ll_custype, :ls_comname FROM LJFIEB_CusComm Where CusCode = :ls_cuscode Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN IF ll_custype = 0 THEN SELECT top 1 empid INTO :ll_relid FROM u_rs_empinfo Where empname = :ls_repname; IF sqlca.SQLCode = 0 THEN arg_msgmx.reltype = 6 arg_msgmx.relid = ll_relid arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname GOTO ext END IF END IF END IF //==================================================================== // 手动 //==================================================================== arg_msgmx.reltype = 3 arg_msgmx.relid = 0 arg_msgmx.ljmail = arg_ljmail arg_msgmx.empname = ls_repname arg_msgmx.comname = ls_comname IF ls_comname = '' THEN arg_msgmx.comname = ls_cuscode END IF ext: RETURN rslt end function public function integer uf_del (long arg_msgid, ref string arg_msg);Int rslt = 1 uo_ljmail_box uo_box uo_box = Create uo_ljmail_box Long ll_boxtype IF uf_get_boxtype(arg_msgid, Ref ll_boxtype, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF IF ll_boxtype = 4 THEN DELETE From u_ljmail_fj Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除龙嘉邮件附件失败,' + commit_transaction.SQLErrText GOTO ext END IF DELETE From u_ljmail_msgmx Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除龙嘉邮件发送明细失败,' + commit_transaction.SQLErrText GOTO ext END IF DELETE From u_ljmail_msg Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除龙嘉邮件信息失败,' + commit_transaction.SQLErrText GOTO ext END IF ELSE Long ll_boxid ll_boxid = uo_box.uf_getboxid(sys_empid, 4, arg_msg) IF ll_boxid = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_ljmail_msg Set boxid = :ll_boxid Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '将邮件移到废件夹失败,' + commit_transaction.SQLErrText GOTO ext END IF END IF ext: Destroy uo_box IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uf_get_boxtype (long arg_msgid, ref long arg_boxtype, ref string arg_msg);uo_ljmail_box uo_box uo_box = Create uo_ljmail_box int rslt = 1 Long ll_boxtype = 0 Long ll_boxid = 0 SELECT boxid INTO :ll_boxid FROM u_ljmail_msg WHERE msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询邮件所属邮箱失败,' + commit_transaction.SQLErrText GOTO ext END IF Long ll_pboxid IF uo_box.uf_getparentid(ll_boxid, Ref ll_pboxid, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF DO WHILE ll_pboxid <> 0 ll_boxid = ll_pboxid IF uo_box.uf_getparentid(ll_boxid, Ref ll_pboxid, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF LOOP IF uo_box.uf_getboxtype(ll_boxid, Ref ll_boxtype, Ref arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF if ll_boxtype = 0 then rslt = 0 arg_msg = '未定义邮箱类型:0' goto ext end if arg_boxtype = ll_boxtype ext: Destroy uo_box RETURN rslt end function public function integer uf_get_html (long arg_msgid, ref string arg_html, ref string arg_msg);Int rslt = 1 Long Len Blob lb SELECT DATALENGTH(htmlbody) INTO :Len FROM u_ljmail_msg Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询html长度失败,' + commit_transaction.SQLErrText GOTO ext END IF IF Len > 2048 THEN SelectBlob htmlbody Into :lb From u_ljmail_msg Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询html失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_html = String(lb) ELSE SELECT htmlbody INTO :arg_html FROM u_ljmail_msg Where msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询html失败,' + commit_transaction.SQLErrText GOTO ext END IF END IF ext: RETURN rslt end function public function integer uf_send (long arg_msgid, ref string arg_msg);Int rslt = 1 uo_ljmail_box uo_box uo_box = Create uo_ljmail_box Long ll_sendflag SELECT sendflag INTO :ll_sendflag FROM u_ljmail_msg WHERE msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询邮件状态失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ll_sendflag <> 2 THEN rslt = 0 arg_msg = '邮件不是草稿,不能发送' GOTO ext END IF Long ll_boxid ll_boxid = uo_box.uf_getboxid(sys_empid, 3, arg_msg) IF ll_boxid = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_ljmail_msg SET sendflag = 1, boxid = :ll_boxid WHERE msgid = :arg_msgid AND sendflag = 2 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新邮件状态失败' + commit_transaction.SQLErrText GOTO ext END IF IF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = '更新邮件状态失败,邮件已经发送或被删除' GOTO ext END IF s_ljmail_msg s_msg IF uf_getinfo(arg_msgid, Ref s_msg, arg_msg, False, True, False, False) <> 1 THEN rslt = 0 GOTO ext END IF Long i, j String ls_repname String ls_cuscode Long ll_pos Long ll_commid ps_cus_ljmail arr_custs[] Boolean lb_find = False FOR i = 1 To UpperBound(s_msg.mx) ll_pos = Pos(s_msg.mx[i].ljmail, '@@') IF ll_pos <= 0 THEN rslt = 0 arg_msg = '非法龙嘉邮件地址:' + s_msg.mx[i].ljmail GOTO ext END IF ls_repname = Mid(s_msg.mx[i].ljmail, 1, ll_pos - 1) ls_cuscode = Mid(s_msg.mx[i].ljmail, ll_pos + 2) SELECT CusCommID INTO :ll_commid FROM LJFIEB_CusComm WHERE CusCode = :ls_cuscode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '解析龙嘉邮件地址[' + s_msg.mx[i].ljmail + ']失败,' + commit_transaction.SQLErrText GOTO ext END IF lb_find = False FOR j = 1 To UpperBound(arr_custs) IF arr_custs[j].commid = ll_commid THEN lb_find = True EXIT END IF NEXT IF lb_find THEN arr_custs[j].ljmails[UpperBound(arr_custs[j].ljmails) + 1] = s_msg.mx[i].ljmail ELSE arr_custs[j].commid = ll_commid arr_custs[j].ljmails[1] = s_msg.mx[i].ljmail END IF NEXT Long ll_curcommid SELECT top 1 CusCommID INTO :ll_curcommid FROM LJFIEB_CusComm Where CusType = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本企业ID失败,' + commit_transaction.SQLErrText GOTO ext END IF String ls_id FOR i = 1 To UpperBound(arr_custs) SELECT top 1 newid() INTO :ls_id From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '获取ID失败,' + sqlca.SQLErrText GOTO ext END IF INSERT INTO LJFIEB_packet (SerialNum, TableName, SendCusCommID, SendSCcode, AddUser, AddTime, ReceiveCusCommID, ReceiveSCcode, ReceiveUser, Status, BillType, SendTime) VALUES (:ls_id, 'LJFIEB_ljmail_msg,LJFIEB_ljmail_msgmx,LJFIEB_ljmail_fj', :ll_curcommid, '', :publ_operator, GETDATE(), :arr_custs[i].commid, '', '', 0, 22, GETDATE()) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入同步数据失败,' + commit_transaction.SQLErrText GOTO ext END IF INSERT INTO LJFIEB_ljmail_msg (msgid, boxid, sendcomid, sendcomname, sendempid, sendempname, sendflag, opemp, opdate, modemp, moddate, subject, htmlbody, reltype, relid, sendtime, ljmail, SerialNum) SELECT msgid, boxid, sendcomid, sendcomname, sendempid, sendempname, sendflag, opemp, opdate, modemp, moddate, subject, htmlbody, reltype, relid, sendtime, ljmail, :ls_id FROM u_ljmail_msg WHERE (msgid = :arg_msgid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '复制龙嘉邮件失败,' + commit_transaction.SQLErrText GOTO ext END IF INSERT INTO LJFIEB_ljmail_msgmx (SerialNum, msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail) SELECT :ls_id, msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail FROM u_ljmail_msgmx WHERE (msgid = :arg_msgid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '复制龙嘉邮件发送明细失败,' + commit_transaction.SQLErrText GOTO ext END IF INSERT INTO LJFIEB_ljmail_fj (SerialNum, msgid, printid, filename, fileblob) SELECT :ls_id, msgid, printid, filename, fileblob FROM u_ljmail_fj WHERE (msgid = :arg_msgid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '复制龙嘉邮件附件失败,' + commit_transaction.SQLErrText GOTO ext END IF NEXT GOTO ext ext: Destroy uo_box IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uf_getljmail (ref string arg_ljmail, ref string arg_msg);Int rslt = 1 String ls_repname String ls_cuscode ls_repname = publ_operator SELECT top 1 CusCode INTO :ls_cuscode FROM LJFIEB_CusComm WHERE CusType = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本企业代号失败,' + commit_transaction.SQLErrText GOTO ext END IF arg_ljmail = ls_repname + '@@' + ls_cuscode ext: RETURN rslt end function public function integer uf_rev_msg (string arg_id, ref string arg_msg);Int rslt = 1 uo_ljmail_box uo_box uo_box = Create uo_ljmail_box Long ll_status Long ll_billtype SELECT status, billtype INTO :ll_status, :ll_billtype FROM LJFIEB_packet WHERE SerialNum = :arg_id Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询龙嘉邮件状态失败,' + commit_transaction.SQLErrText GOTO ext END IF IF ll_billtype <> 22 THEN rslt = 0 arg_msg = '接收的内容不是龙嘉邮件' GOTO ext END IF IF ll_status <> 5 THEN rslt = 0 arg_msg = '龙嘉邮件不在未处理状态' GOTO ext END IF UPDATE LJFIEB_packet SET status = 6 WHERE SerialNum = :arg_id AND status = 5 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新龙嘉邮件状态失败,' + commit_transaction.SQLErrText GOTO ext END IF IF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = '龙嘉邮件正在处理,请稍候再试' GOTO ext END IF String ls_mycuscode SELECT top 1 CusCode INTO :ls_mycuscode FROM LJFIEB_CusComm WHERE CusType = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本企业代号失败,' + commit_transaction.SQLErrText GOTO ext END IF Long arr_empid[] String arr_empname[] Long ll_cnt = 0 String ls_ljmail String ls_empname, ls_cuscode Long ll_empid Long ll_pos Long i DECLARE cur1 CURSOR FOR SELECT ljmail FROM LJFIEB_ljmail_msgmx WHERE SerialNum = :arg_id Using commit_transaction; OPEN cur1; FETCH cur1 Into :ls_ljmail; DO WHILE commit_transaction.SQLCode = 0 ll_pos = Pos(ls_ljmail, '@@') IF ll_pos <= 0 THEN GOTO _next END IF ls_empname = Mid(ls_ljmail, 1, ll_pos - 1) ls_cuscode = Mid(ls_ljmail, ll_pos + 2) IF ls_cuscode <> ls_mycuscode THEN GOTO _next END IF FOR i = 1 To UpperBound(arr_empname) IF ls_empname = arr_empname[i] THEN GOTO _next END IF NEXT SELECT top 1 empid INTO :ll_empid FROM u_rs_empinfo Where empname = ls_empname; IF sqlca.SQLCode <> 0 THEN GOTO _next END IF ll_cnt++ arr_empid[ll_cnt] = ll_empid arr_empname[ll_cnt] = ls_empname _next: FETCH cur1 Into :ls_ljmail; LOOP CLOSE cur1; Boolean hassuper = False FOR i = 1 To ll_cnt IF arr_empid[i] = 0 THEN hassuper = True EXIT END IF NEXT IF Not hassuper THEN ll_cnt++ arr_empid[ll_cnt] = 0 arr_empname[ll_cnt] = sys_super_name END IF Long ll_boxid Long ll_msgid FOR i = 1 To ll_cnt IF uo_box.uf_initbox(arr_empid[i], arg_msg, True) <> 1 THEN rslt = 0 GOTO ext END IF ll_boxid = uo_box.uf_getboxid(arr_empid[i], 1, arg_msg) IF ll_boxid <= 0 THEN rslt = 0 GOTO ext END IF ll_msgid = f_sys_scidentity(0, "u_ljmail_msg", "msgid", arg_msg, True, id_sqlca) IF ll_msgid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_ljmail_msg (msgid, boxid, sendcomid, sendcomname, sendempid, sendempname, sendflag, opemp, opdate, modemp, moddate, subject, htmlbody, reltype, relid, sendtime, ljmail) SELECT :ll_msgid, :ll_boxid, sendcomid, sendcomname, sendempid, sendempname, 3, opemp, opdate, modemp, moddate, subject, htmlbody, reltype, relid, sendtime, ljmail FROM LJFIEB_ljmail_msg WHERE (SerialNum = :arg_id) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '接收邮件失败,' + commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_ljmail_msgmx (msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail) SELECT :ll_msgid, printid, comid, comname, empid, empname, reltype, relid, ljmail FROM LJFIEB_ljmail_msgmx WHERE (SerialNum = :arg_id) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '接收邮件明细失败,' + commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_ljmail_fj (msgid, printid, filename, fileblob) SELECT :ll_msgid, printid, filename, fileblob FROM LJFIEB_ljmail_fj WHERE (SerialNum = :arg_id) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '接收邮件附件失败,' + commit_transaction.SQLErrText GOTO ext END IF NEXT GOTO ext ext: Destroy uo_box IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uf_setread (long arg_msgid, long arg_ifread, ref string arg_msg);Int rslt = 1 UPDATE u_ljmail_msg SET ifread = :arg_ifread WHERE msgid = :arg_msgid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新邮件已经标记失败,' + commit_transaction.SQLErrText GOTO ext END IF IF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = '邮件已经被删除,请刷新后再试' GOTO ext END IF ext: IF rslt = 1 THEN COMMIT Using commit_transaction; ELSE ROLLBACK Using commit_transaction; END IF RETURN rslt end function on uo_ljmail_msg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_ljmail_msg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on