【RPA案例分享】企業(yè)SRM系統(tǒng)填報——(二)流程分析及模塊設計

【RPA案例分享】企業(yè)SRM系統(tǒng)填報——(一)業(yè)務流程文檔

模塊結構

在上一篇中,我們看到需求較為復雜谣殊,但總體的操作分為以下四個部分:SRM系統(tǒng)操作(B/S架構)、表格處理、發(fā)送郵件通知世分、PDF文件內容獲取。另外缀辩,從流程的角度臭埋,又可以分為以下兩個部分:SRM系統(tǒng)填報流程以及獲取填報結果流程。

我們可以根據四個操作設計四個模塊臀玄。再設計一個主模塊瓢阴,其中定義兩個流程(finish_erp和download_pdf),并將處理邏輯寫在這個主模塊中健无,作為整個RPA機器人運行的入口荣恐。


模塊結構

PDF文件內容獲取

對于這種非掃描件的PDF,我們使用pdfminer進行文本的提取

from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, process_pdf

def read_pdf(pdf):
    """
    讀取pdf文件累贤,獲取所有內容
    其中參數pdf為以二進制方式打開pdf的文件流
    """
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    process_pdf(rsrcmgr, device, pdf)
    device.close()
    content = retstr.getvalue()
    retstr.close()
    return str(content)

提取出所有文本后叠穆,要找到我們需要的出入庫單號字段,該字段是由FMIX開頭臼膏,后五位大寫字母或數字硼被,最后12位全為數字組成的,我們使用正則表達式進行提取


import re

def re_match(text):
    """
    編寫正則表達式讶请,匹配pdf內容中我們需要的出入庫單號字段
    """
    # 匹配規(guī)則:前四位FMIX祷嘶,后五位大寫字母或數字,最后12位全為數字
    pattern = re.compile(r'[F][M][I][X][A-Z0-9]{5}[0-9]{12}')
    return re.findall(pattern, text)[0]

完整的parse_pdf.py文件:

import re
from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
 
 
def read_pdf(pdf):
    """
    讀取pdf文件夺溢,獲取所有內容
    其中參數pdf為以二進制方式打開pdf的文件流
    """
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    process_pdf(rsrcmgr, device, pdf)
    device.close()
    content = retstr.getvalue()
    retstr.close()
    return str(content)
 
def re_match(text):
    """
    編寫正則表達式论巍,匹配pdf內容中我們需要的出入庫單號字段
    """
    # 匹配規(guī)則:前四位FMIX,后五位大寫字母或數字风响,最后12位全為數字
    pattern = re.compile(r'[F][M][I][X][A-Z0-9]{5}[0-9]{12}')
    return re.findall(pattern, text)[0]
 
if __name__ == '__main__':
    with open('ShipNote.pdf', "rb") as my_pdf:
        print(re_match(read_pdf(my_pdf)))

發(fā)送郵件通知

我們通過SMTP協(xié)議進行郵件的發(fā)送嘉汰,需要用到python自帶的emailsmtplib兩個模塊,前者用來構造郵件状勤,后者用來發(fā)送郵件鞋怀。用法請參考SMTP發(fā)送郵件

由流程文檔可知一共有兩種類型的郵件:分別是異常提醒和業(yè)務處理完成提醒持搜,前者需要添加《ERP處理表》作為附件密似,后者直接將出貨單號作為正文即可。

我們使用開通了SMTP服務的QQ郵箱作為發(fā)件人葫盼,將郵箱密碼残腌、發(fā)件郵箱、收件人、主題抛猫、正文蟆盹、附件作為參數編寫函數如下:

import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Header

def send_email(mail_pass, sender, receivers, subject, text, file_path=None):
    # 第三方 SMTP 服務
    mail_host = "smtp.qq.com"  # 設置服務器

    # 創(chuàng)建一個郵件實例
    message = MIMEMultipart()
    message['From'] = Header("RPA機器人", 'utf-8')
    message['To'] = Header("業(yè)務人員", 'utf-8')
    message['Subject'] = Header(subject, 'utf-8')

    # 郵件正文內容
    message.attach(MIMEText(text, 'plain', 'utf-8'))

    # 構造附件
    if file_path:
        file = MIMEApplication(
            open(file_path, 'rb').read())
        file.add_header('Content-Disposition',
                        'attachment',
                        filename=Header("ERP處理表.xls", "utf-8").encode())
        message.attach(file)

    try:
        smtpObj = smtplib.SMTP()
        smtpObj.connect(mail_host, 25)  # 25為 SMTP 端口號
        smtpObj.login(sender, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("郵件發(fā)送成功")
    except smtplib.SMTPException as e:
        print(e)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闺金,隨后出現的幾起案子逾滥,更是在濱河造成了極大的恐慌,老刑警劉巖败匹,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寨昙,死亡現場離奇詭異,居然都是意外死亡哎壳,警方通過查閱死者的電腦和手機毅待,發(fā)現死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归榕,“玉大人尸红,你說我怎么就攤上這事∩残梗” “怎么了外里?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長特石。 經常有香客問我盅蝗,道長,這世上最難降的妖魔是什么姆蘸? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任墩莫,我火速辦了婚禮,結果婚禮上逞敷,老公的妹妹穿的比我還像新娘狂秦。我一直安慰自己,他們只是感情好推捐,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布裂问。 她就那樣靜靜地躺著,像睡著了一般牛柒。 火紅的嫁衣襯著肌膚如雪堪簿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天皮壁,我揣著相機與錄音椭更,去河邊找鬼。 笑死蛾魄,一個胖子當著我的面吹牛甜孤,可吹牛的內容都是我干的协饲。 我是一名探鬼主播畏腕,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼缴川,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了描馅?” 一聲冷哼從身側響起把夸,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铭污,沒想到半個月后恋日,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡嘹狞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年岂膳,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅网。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡谈截,死狀恐怖,靈堂內的尸體忽然破棺而出涧偷,到底是詐尸還是另有隱情簸喂,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布燎潮,位于F島的核電站喻鳄,受9級特大地震影響,放射性物質發(fā)生泄漏确封。R本人自食惡果不足惜除呵,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爪喘。 院中可真熱鬧颜曾,春花似錦、人聲如沸腥放。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秃症。三九已至候址,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間种柑,已是汗流浹背岗仑。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留聚请,地道東北人荠雕。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓稳其,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炸卑。 傳聞我的和親對象是個殘疾皇子既鞠,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361