【乐企板式文件生成工程】关于乐企板式文件(PDF/OFD/XML)生成工程介绍

1、摘要

乐企文件生成是一项重中之重的工作,但是单纯根据乐企文档去实现文件生成的话,是一项非常耗时且实现的效果并不一定很好的方式,目前【乐企文件生成工程】支持单独部署、支持多种文件类型(PDF、OFD、XML)、支持多类型发票(成品油、稀土、农产品、货物运输、旅客运输、不动产租赁、不动产销售、建筑服务)

2、发票文件生成方式有两种思路:

1、根据已有的OFD模板,动态替换ofd模板内容;之后将ofd转pdf(局限:单行问题不大)
可在【乐企】专栏查看详细代码详情可以在此处了解【乐企】有关乐企能力测试接口对接-基础版(详细)
2、根据html模板动态占位:该工程就是这种方式 ,目前效果良好,可看下图。
源码获取方式: 点击下方公众号,加作者微信获取代码版本信息

目前已经支持类型如下:

  • 数电专单行、多行;
  • 数电普单行、多行;
  • 成品油类型发票-专/普 单、多
  • 稀土类型发票-专/普 单、多
  • 货物运输-专-单行、多行;
  • 货物运输-普-单行、多行;
  • 旅客运输-专-单行、多行;
  • 旅客运输-普-单行、多行;
  • 不动产租赁-专
  • 不动产租赁-普

亮点一:操作简单,支持本地存储以及云存储

只需要切换配置文件中的文件开启方式即可~(case如下)

java 复制代码
# 本地文件系统
file:
  local:
    enable: true  #这里如果是true 则按照本地文件路径存储
    basePath: /Users/yanjun.hou/Downloads/files

  # 云存储文件系统
  oss:
    enable: false #这里如果是true 则按照OSS方式存储
    endpoint: "" #对象存储服务的URL
    customDomain: "" #自定义域名
    appId: "" #应用ID
    region: "" #区域
    accessKey: ""
    secretKey: ""

亮点二:无需二次实体映射,直接按照乐企官方文档的JSON报文传输即可实现PDF、OFD、XML三种文件的生成!

java 复制代码
{
    "ptbh": "ptbh-111222333",
    "bz": "这个是备注信息,销售方地址:北京市区朝阳区南京街道,销售方电话:这个是销售方3213213121122 购买方地址:这个是购买方地址,苏州市吴中区郭巷街道,新时代撒,购买方电话:这个是购买方电话,3123213213",
    "fphm": "24123421232324342484",
    "fppz": "01",
    "gmfmc": "购买方名称",
    "gmfnsrsbh": "31232198381273982",
    "hjje": 100,
    "hjse": 10,
    "jshj": 110,
    "kpr": "开票人",
    "kprq": "2024-10-19 17:22:06",
    "lzfpbz": "0",
    "qyDm": "11100",
    "tdys": "03",
    "xsfmc": "销售方名称",
    "xsfnsrsbh": "32131287869082372",
    "jzfwtdys": {
        "tdzzsxmbh": "tdzzsxmbh",
        "kdsbz": "N"
    },
    "fpmxList": [
        {
            "jzfwfsd":"建筑服务发生地",
            "jzxmmc":"建筑项目名称",
            "mxxh": 1,
            "dj": "100",
            "dw": "单位",
            "ggxh": "92",
            "hwhyslwfwmc": "*测试*测试商品",
            "sphfwssflhbbm": "11111",
            "xmmc": "测试商品",
            "spfwjc": "测试",
            "hsje": "110",
            "je": "100",
            "se": "10",
            "sl": "1",
            "slv": "0.1",
            "fphxz": "01"
        }
    ]
}

亮点三:切换tdys即可实现不同票种动态生成~


java 复制代码
//一个入口,实现所有发票票种实现~
invoiceFileFactory.getInvoiceFileService(baseUploadInvoiceReq.getTdys()).makeInvoiceFile(baseUploadInvoiceReq);

实现效果

增值税专用发票--单行

增值税普通发票--单行

增值税专用发票--多行

增值税普通发票--多行

增值税专/普/多行 稀土

增值税专/普/多行 成品油

货物运输-(专普票都支持)单行

货物运输(专普票都支持)-多行

不动产租赁

旅客运输(身份信息未做加密处理,可以自己针对出生日期进行分段加密)

项目结构说明

lq-Invoice-project

├── common-oss#文件工程

│ ├── src

│ │ ├── main

│ │ │ ├── java

│ │ │ │ └── com.lq.file

│ │ │ │ ├── core #文件核心包:配置文件读取、操作模板方法定义

│ │ │ │ ├── local # 本地文件存储方式实现

│ │ │ │ ├── oss # OSS文件存储方式实现(支持aws)

│ │ │ │ └── utils

│ │ │ │ └── FileAutoConfiguration.java

│ │ │ └── resources

│ ├── pom.xml

└── lq-invoice#乐企工程

├── src

│ ├── main

│ │ ├── java

│ │ │ └── com.lq.invoice

│ │ │ ├── controller

│ │ │ ├── domain

│ │ │ ├── enums

│ │ │ ├── exception

│ │ │ ├── factory

│ │ │ ├── service

│ │ │ └── util

│ └── resources

└── pom.xml

common-oss模块

application.yml

xml 复制代码
# 本地文件系统
file:
  local:
    enable: true
    basePath: /Users/yanjun.hou/Downloads/files

  # 云存储文件系统
  oss:
    enable: false
    endpoint: "" #对象存储服务的URL
    customDomain: "" #自定义域名
    appId: "" #应用ID
    region: "" #区域
    accessKey: ""
    secretKey: ""

根据注解ConditionalOnProperty动态选择文件上传实现方式,默认本地

项目支持:

1、沙箱环境/正式环境测试

2、文件生成

其中:file文件夹下的数据是关于文件生成的实现

impl文件夹下的数据是关于乐企业务接口的具体实现。

业务实现大致如下:

文件实现大致如下:


  • 乐企接口

  • 乐企API对接

  • 乐企沙箱测试

  • 乐企电子发票

  • 乐企板式文件生成

相关推荐
汤姆宝库11 小时前
法考历年真题及答案解析合集pdf版(2002-2025年)
pdf·法考
优化控制仿真模型11 小时前
2026【英一】考研英语一历年真题及答案解析PDF电子版(1980-2025年)
考研·pdf
云月呀2 天前
《死亡回忆录》藏汉双语版电子版 PDF,穆迪博士 150 例濒死体验访谈,一部关于生死的温柔读本
pdf·死亡回忆录
郭小李2 天前
mybatis的 Mapper.xml语法
xml·java·mybatis
步行cgn2 天前
为什么既要 web.xml 又要 springmvc.xml?能不能只配一个?
xml·前端·hive
xiaolinudao1232 天前
给pdf文件盖骑缝章的软件有哪些
pdf
hu55667982 天前
如何使用Adobe Acrobat Pro DC将1页PDF切割为2页,A3变A4打印。
pdf
ComPDFKit2 天前
PDF转Word后,每行都成一段?先分清断段、文本框和扫描页
pdf·word
Nymph_Zhu3 天前
pdf转换markdown预览及内容互相点击定位
前端·pdf·vue3·markdown·element-plus
web打印社区3 天前
Lodop在Edge和双核浏览器-先分清内核
前端·javascript·edge·pdf·ecmascript·html5