login
Python RPA发票自动化系统
2025/08/04·StepFun can make mistakes, check important info.
与针对您的场景,我将设计一个高效、低风险、免费的RPA流程方案,使用Python为主语言,结合轻量级工具实现。以下是完整的实现方案: --- ### **整体架构** ```mermaid graph TD A[QQ消息监听] --> B[自动保存Excel] B --> C[数据处理与校验] C --> D[诺诺开票自动化] C --> E[错误信息反馈] D --> F[ERP系统操作] D --> G[成功通知] F --> H[未申请单处理] ``` --- ### **具体实现步骤** #### **1. QQ消息监听 & 文件接收** - **工具**:`go-cqhttp`(开源QQ机器人框架) - **方案**: 1. 部署`go-cqhttp`监听指定QQ群/私聊消息 2. 收到Excel文件时自动下载并重命名: ```python # 文件名格式:QQ号_时间戳.xlsx filename = f"{sender_id}_{int(time.time())}.xlsx" ``` #### **2. Excel数据处理** - **库**:`pandas` + `openpyxl` - **脚本功能**: ```python def process_excel(input_path): df = pd.read_excel(input_path) # 校验逻辑示例 valid_df = df[df['税号'].str.match(r'^[A-Z0-9]{15,18}$')] invalid_df = df[~df.index.isin(valid_df.index)] valid_df.to_excel("valid_invoices.xlsx", index=False) invalid_df.to_excel("errors_{sender_id}.xlsx", index=False) return valid_df, invalid_df ``` #### **3. 诺诺开票自动化** - **工具**:`Selenium` + `ChromeDriver` - **关键流程**: ```python from selenium import webdriver def nunuo_autoinvoice(file_path): driver = webdriver.Chrome() driver.get("https://www.jss.com/nuonuo") # 登录操作 driver.find_element("id", "username").send_keys("your_user") # ...其他登录步骤 # 上传文件 upload = driver.find_element("css", "input[type='file']") upload.send_keys(os.path.abspath(file_path)) # 提交开票 driver.find_element("id", "submit-btn").click() invoice_nums = parse_invoice_numbers(driver.page_source) # 解析返回的发票号 return invoice_nums ``` #### **4. QQ消息反馈** - **方案**: - 错误信息:通过`go-cqhttp`的API发送文件 - 成功通知:发送模板消息 ```python import requests def send_qqmsg(receiver, msg, file_path=None): url = "http://127.0.0.1:5700/send_msg" if file_path: requests.post(url+"?group_id="+str(receiver), files={'file': open(file_path,'rb')}) else: requests.post(url, json={'user_id':receiver, 'message':msg}) ``` #### **5. ERP系统操作** ```python def erp_autofill(apply_num, invoice_num, invoice_date): driver.get("http://erp.internal.com") # 定位待开票申请单 search_input = driver.find_element("id", "search-box") search_input.send_keys(apply_num) # 填写发票信息 driver.find_element("name", "invoice_num").send_keys(invoice_num) driver.find_element("name", "invoice_date").send_keys(invoice_date) driver.find_element("id", "confirm-btn").click() ``` #### **6. 未申请单处理** ```python def save_unapplied_invoices(client_codes, invoice_nums): df = pd.DataFrame({'客户编码':client_codes, '发票号':invoice_nums}) df.to_excel("unapplied_invoices_{date}.xlsx", index=False) ``` --- ### **完整工作流** ```python # main.py import pandas as pd from automation_tools import * while True: # 1. 监听QQ消息 new_file = monitor_qq_messages() if new_file: # 2. 处理Excel valid_df, invalid_df = process_excel(new_file) # 3. 错误反馈 if not invalid_df.empty: send_qqmsg(sender_id, "文件存在错误", "errors.xlsx") # 4. 诺诺开票 if not valid_df.empty: invoice_data = nunuo_autoinvoice("valid_invoices.xlsx") send_qqmsg(sender_id, "开票成功!发票号:" + ",".join(invoice_data['nums'])) # 5. ERP操作 applied_nums = [] for _, row in valid_df.iterrows(): if row['申请单号']: erp_autofill(row['申请单号'], row['发票号'], row['开票日期']) applied_nums.append(row['申请单号']) else: save_unapplied_invoices(row['客户编码'], row['发票号']) ``` --- ### **关键优势** 1. **零成本方案**: - 全部使用开源工具(Python生态) - 无需商业RPA软件许可 2. **风险控制**: - 双因素校验:Excel数据校验 + 开票平台返回确认 - 隔离环境:使用独立虚拟环境运行脚本 - 异常捕获:每个步骤都有try/except和日志记录 3. **高性能设计**: - 批量开票:诺诺平台支持批量导入 - 异步处理:使用Celery任务队列处理多个文件 - 内存优化:Pandas分块处理大文件 4. **容错机制**: - 自动重试失败操作(ERP操作) - 断点续传:记录处理进度 - 错误日志实时通知管理员 --- ### **部署建议** 1. **运行环境**: ```bash # 推荐环境 Python 3.10 + Chrome + go-cqhttp ``` 2. **依赖安装**: ```bash pip install pandas selenium openpyxl requests ``` 3. **启动方式**: ```bash nohup python main.py > run.log 2>&1 & ``` > **注意事项**: > 1. QQ机器人需使用小号部署,避免主账号风险 > 2. ERP操作需在内网环境进行 > 3. 敏感信息(账号密码)使用.env文件管理 > 4. 定期更新ChromeDriver匹配浏览器版本 此方案已在多个企业财务场景验证,日均处理2000+发票,错误率低于0.1%。如需具体代码实现,我可提供完整示例代码包。该方案进行对比,哪一个更优,结合优点重新帮我规划一个更优的,并一步步教我怎么操作
Reason
附件解析
思考过程

我们结合两个方案的优势,设计一个更优的解决方案。主要优化点:

  1. 使用go-cqhttp替代模拟操作,实现真正的QQ消息监听
  2. 增加更健壮的错误处理和日志系统
  3. 优化文件处理和命名规范
  4. 添加重试机制和断点续传
  5. 使用环境变量管理敏感信息

以下是最终优化方案:

python

部署和配置步骤

1. 环境准备

bash

2. 配置文件

创建.env文件:

ini

3. 配置go-cqhttp

  1. 运行go-cqhttp
  2. 选择HTTP通信方式
  3. 修改配置文件:
yaml

4. 运行系统

bash

5. 使用说明

  1. 业务员通过QQ发送Excel文件
  2. 系统自动:
    • 下载并重命名文件
    • 处理Excel数据
    • 上传到诺诺开票
    • 操作ERP系统
    • 反馈结果给业务员
  3. 管理员监控日志文件invoice_system.log

6. 关键优化点

  1. 健壮性

    • 文件哈希去重
    • 异常处理和详细日志
    • 自动备份原始文件
    • 无头浏览器模式
  2. 可维护性

    • 环境变量配置
    • 模块化设计
    • 清晰的日志系统
  3. 扩展性

    • 易于添加新的业务规则
    • 可扩展为多账号支持
    • 可添加Dashboard监控
  4. 安全性

    • 敏感信息不在代码中硬编码
    • 使用小号作为机器人
    • 文件权限控制

这个方案结合了之前的两个方案优势,使用真正的QQ机器人API进行消息监听,增加了更全面的错误处理,优化了文件管理策略,并保持了轻量级和免费的特性。系统设计为每天可处理数千条发票记录,同时保持低错误率。

最优发票处理RPA系统整合方案

基于您提供的场景和之前的方案分析,我设计了一个更优的发票处理RPA系统,结合了各方案优势并优化了工作流程。

最终方案架构

mermaid

完整实现代码

python

部署和配置步骤

1. 环境准备

bash

2. 配置go-cqhttp (QQ机器人框架)

  1. go-cqhttp releases 下载对应版本
  2. 运行go-cqhttp并按照提示配置
  3. 修改配置文件为HTTP通信模式:
yaml

3. 创建.env配置文件

ini

4. 目录结构

text

5. 运行系统

bash

6. 使用说明

  1. 业务员操作

    • 通过QQ发送Excel文件给机器人QQ号
    • 文件应包含必要的开票信息(客户名称、金额、税率等)
  2. 系统自动操作

    • 接收并验证Excel文件
    • 处理数据并分类正确/错误开票信息
    • 上传到诺诺开票系统
    • 处理ERP系统开票申请
    • 反馈结果给业务员
  3. 文件命名规范

    • 正确文件:[QQ号]_[时间戳]_valid.xlsx
    • 错误文件:[QQ号]_[时间戳]_error.xlsx
    • 未申请单文件:unapplied_[时间戳].xlsx

7. 关键优化特性

  1. 健壮性增强

    • 文件哈希去重机制
    • 自动备份原始文件
    • 全面的异常处理
    • 详细的日志记录
  2. 性能优化

    • 无头浏览器模式减少资源占用
    • 批量数据处理
    • 智能等待机制
  3. 易用性改进

    • 环境变量配置管理
    • 模块化设计便于维护
    • 清晰的QQ消息反馈
  4. 容错机制

    • 网络中断自动重连
    • 错误文件隔离处理
    • 断点续传能力

这个方案结合了之前的方案优势,使用真正的QQ机器人API进行消息监听,增加了更全面的错误处理,优化了文件管理策略,并保持了轻量级和免费的特性。系统设计为每天可处理数千条发票记录,同时保持低错误率。

部署后,建议先进行小规模测试验证系统稳定性,然后再全面推广使用。