税票与发票开具
本文整理客户开票资料、税票列表、提交、银行支行查询,以及 TMS/外部系统发票状态同步。发票链路通常和客户资料、销售、收款、对账单关联,但本项目中入口相对独立。
业务目标
- 维护客户开票资料。
- 查询和提交税票信息。
- 获取银行支行列表。
- 查询和变更外部发票状态。
- 支撑销售、收款、对账后的发票开具和状态追踪。
入口文件
- 开票资料 PC:
application/controllers/basedata/TaxInvoice.php - 开票资料服务:
application/Services/TaxInvoice/TaxInvoiceSer.php - 内部发票状态:
application/controllers/inner/Invoice.php
核心方法
TaxInvoice.php:
getTaxInvoice:获取开票资料。submit:提交开票资料。getList:税票列表。getBranchBankList:银行支行列表。
TaxInvoiceSer.php:
getTaxInvoice:按参数查询开票资料。submit:保存或更新开票资料。getList:列表查询。getBranchBankList:支行查询。
inner/Invoice.php:
getInvoiceStatus:查询发票状态。changeInvoiceStatus:变更发票状态。
核心表
发票资料可能分散在客户、联系人、税票资料模型中,排查时重点从下面这些表和模型找:
t_bs_contactt_bs_contact_info- 客户开票资料相关模型。
- 销售单、收款单、对账单中的发票关联字段。
主流程
flowchart TD
A["客户/服务站维护开票资料"] --> B["保存税号、抬头、地址、电话、开户行"]
B --> C["销售/收款/对账产生开票诉求"]
C --> D["发票申请或状态查询"]
D --> E["外部系统开票"]
E --> F["回传或查询发票状态"]
字段口径
- 发票抬头和税号必须和客户开票主体一致。
- 开户行、银行账号、注册地址、注册电话通常作为开票资料的一部分。
- 支行列表可能来自银行数据接口或本地缓存,不能随意写死。
- 发票状态要区分“申请状态”和“外部开票状态”。
异常流程
- 提交失败:查必填字段、税号格式、客户权限。
- 支行查不到:查银行关键字、城市、外部接口或缓存。
- 发票状态不更新:查
inner/Invoice.php是否收到变更请求。 - 销售/对账无法开票:查客户开票资料是否完整、业务单据是否满足状态。
常用排查命令
rg -n "class TaxInvoice|getTaxInvoice|submit|getBranchBankList" application/controllers/basedata application/Services/TaxInvoice
rg -n "getInvoiceStatus|changeInvoiceStatus|class Invoice" application/controllers/inner/Invoice.php
rg -n "tax|invoice|TaxInvoice|开票|发票" application/controllers application/Services application/models
改动风险和回归清单
- 开票资料:新增、编辑、必填校验、历史客户兼容。
- 支行查询:模糊查询、空结果、外部接口失败。
- 发票状态:查询、变更、重复回调。
- 业务联动:销售、收款、对账单是否正确读取最新开票资料。