一、部署前准备阶段
1. 环境确认
- 服务器配置:4核8G以上(支持高并发发票处理)
- 操作系统:CentOS 7.6+/Ubuntu 20.04(LTS版本)
- 数据库:MySQL 8.0(需支持事务隔离级别READ COMMITTED)
- 中间件:Nginx 1.18+、Redis 6.0+(用于发票缓存)
- 依赖工具:JDK 11、Maven 3.6+、Node.js 14+(前后端分离架构)
2. 源码获取
- 从官方仓库克隆完整源码包(含`invoice-core`、`invoice-api`、`invoice-ui`三模块)
- 验证SHA-256校验和(示例值:`a1b2c3d4...`需与官方文档一致)
- 检查分支:选择`release/v2.3.x`稳定版本(避免开发版bug)
3. 配置文件初始化
- 修改`application-prod.yml`:
```yaml
invoice:
tax-rate: 0.09 水果批发行业增值税率
number-rule: "FP{yyyy}{MM}{dd}{0001}" 发票编号规则
timeout: 30000 开票超时时间(ms)
```
- 配置`nginx.conf`的静态资源路径和API代理:
```nginx
location /api/invoice {
proxy_pass http://localhost:8080/invoice;
}
```
二、核心部署流程
1. 数据库初始化
- 执行SQL脚本(位于`/db/init.sql`):
```sql
CREATE TABLE `invoice_records` (
`id` bigint NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL COMMENT 关联订单号,
`amount` decimal(10,2) NOT NULL COMMENT 金额,
`tax` decimal(10,2) GENERATED ALWAYS AS (amount * 0.09) STORED,
`status` tinyint DEFAULT 0 COMMENT 0-待开票 1-已开票 2-作废,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`)
) ENGINE=InnoDB;
```
- 导入基础数据(税率表、开票方信息等)
2. 后端服务部署
- 使用Maven构建:
```bash
mvn clean package -DskipTests -Pprod
```
- 生成`invoice-service.jar`(约120MB)
- 启动命令(带JMX监控):
```bash
java -jar -Xms512m -Xmx1024m -Dspring.profiles.active=prod \
-Dcom.sun.management.jmxremote invoice-service.jar
```
3. 前端部署
- 构建Vue项目:
```bash
npm install && npm run build:prod
```
- 将`dist`目录内容复制至Nginx的`/usr/share/nginx/html/invoice`
三、发票管理专项配置
1. 税控设备集成
- 安装税控盘驱动(以百旺金赋为例):
```bash
dpkg -i skfp-dkms_2.0.0_amd64.deb
```
- 配置`tax-control.properties`:
```properties
tax.device.type=UK
tax.device.port=/dev/ttyS0
tax.company.name=XX水果批发有限公司
```
2. 电子发票配置
- 申请乐企平台API权限
- 配置签名证书(.pfx格式):
```yaml
electronic:
cert-path: /opt/certs/invoice.pfx
cert-password: ENC(加密后的密码)
api-url: https://api.baiwang.com/einv
```
四、测试验证阶段
1. 功能测试用例
- 正常开票流程:
1. 创建订单(金额1000元)
2. 申请开票(选择"增值税专票")
3. 验证数据库状态变为`1`
4. 检查税控盘是否成功打印
- 异常场景:
- 重复开票(相同订单号)
- 超额开票(单张发票限额测试)
- 税控盘离线测试
2. 性能测试
- 使用JMeter模拟50并发开票请求
- 监控指标:
- 平均响应时间:<800ms
- 错误率:<0.5%
- 数据库连接池使用率:<70%
五、上线运维规范
1. 日志管理
- 配置`logback-spring.xml`:
```xml
```
- 日志轮转策略:按天分割,保留30天
2. 监控告警
- Prometheus配置:
```yaml
- job_name: invoice-service
static_configs:
- targets: [192.168.1.100:9090]
metrics_path: /actuator/prometheus
```
- 关键告警规则:
- 开票失败率 > 5%
- 待开票队列积压 > 100
3. 备份策略
- 每日全量备份数据库(`mysqldump -u root -p invoice > backup.sql`)
- 每周异地备份发票PDF文件
六、合规性检查
1. 税务合规
- 验证发票号码连续性
- 检查税率计算准确性(金额×9%)
- 确保作废发票记录永久保留
2. 审计要求
- 开启操作日志(记录开票人、时间、IP)
- 保留至少5年历史数据
- 提供税务查询接口(按发票号码/日期查询)
常见问题处理
1. 税控盘连接失败
- 检查`dmesg | grep tty`确认设备识别
- 验证用户权限:`ls -l /dev/ttyS0`(需属于dialout组)
2. 电子发票签名失败
- 检查证书有效期:`openssl pkcs12 -in invoice.pfx -nodes | openssl x509 -noout -dates`
- 确认API网关时间同步(`ntpdate pool.ntp.org`)
3. 性能瓶颈优化
- 数据库加索引:
```sql
ALTER TABLE invoice_records ADD INDEX idx_status_create_time (status, create_time);
```
- 引入消息队列(RabbitMQ)解耦开票流程
建议部署后进行灰度发布,先开放10%流量验证,逐步扩大至全量。同时建立发票管理专项运维手册,包含常见问题SOP和税务政策更新响应流程。