
简介赤龙ERP是一套面向中小企业的免费开源企业级ERP系统以财务业务一体化为核心涵盖计划预算、订单、出入库、发票、收付款、凭证、总账等完整链路支持工作流与进销存管理旨在提升管理流、信息流、数据流的管控效率。资源包大小53.26MB共2000个文件以802个Java源文件为后端主体465个JS脚本负责前端交互209个HTML与196个JSP搭建页面另有119个CSS样式、84个SQL数据库脚本及xml、properties等配置SQL脚本用于初始化数据库表xml与properties则定义框架及运行参数目录结构清晰便于按模块排查和部署。目前已有88人学习下载。解压后可获得完整的系统源码、数据库初始化脚本、前后台页面与工作流配置适合企业级应用开发人员、ERP实施顾问及财务信息化学习者深入研读既能理解财务业务一体化的实现思路也可基于开源代码部署运行并定制改造。1. 赤龙ERP把进销存、财务系统和工作流塞进同一套开源系统提到ERP很多中小企业的第一反应是那套只用了一半的进销存库存账能查、货也对得上可一到月底财务就抓瞎收入成本全靠手工倒。赤龙ERP就是奔着解决这个断点来的——它把计划预算、订单、出入库、发票、收付款、凭证、分录、总账整条链放进一个系统跑业务单据审核通过后直接驱动财务凭证。适合正在做ERP选型的实施顾问也适合想搞明白“业务数据到底怎么变成会计凭证”的Java开发。这套东西不是把开源进销存和财务表格硬拼在一起它的落点是财务业务一体化的完整闭环。2. 财务业务一体化的闭环设计从采购订单到总账凭证的数据流在企业应用系统里真正让人头疼的不是单个模块而是单据怎么流动。库存模块说“已入库”采购模块说“发票待匹配”财务系统说“没有暂估凭证”月底三个口径各说各话账根本合不上。赤龙ERP把这条链路拆成三层来设计每一层只处理自己该处理的事但单据状态是连通的。2.1 模块边界与数据域划分业务执行层、财务结算层、总账核算层先看一张我拆解数据模型时整理的分层表比任何说明文档都直观层级核心单据主要落库动作业务执行层采购订单、销售订单、出入库单数量变动、库存流水、价税分离财务结算层采购发票、销售发票、收付款单应收应付挂账、核销往来总账核算层凭证、分录、科目余额借贷平衡校验、期间汇总这个分层的价值在于业务人员永远只录入业务单据不碰会计科目会计人员看到的是已经生成好的凭证最多做复核和调整。两拨人的操作边界被系统隔离了数据却是同一条链。主数据设计上物料档案里除了名称、规格、计量单位还会带一个“存货科目”的关联字段比如原材料对应的会计科目编码。供应商档案则关联“应付账款”科目客户档案关联“应收账款”科目。这就是后面自动生成凭证的地基——科目不是在凭证里手敲的是从档案带出来的。2.2 单据驱动财务凭证暂估入库与冲销的实际走法财务业务一体化最核心的动作是业务单据状态变化时自动触发凭证模板。赤龙ERP的做法是给每种单据类型绑定一套凭证模板模板里定义好借贷方向、取值字段和摘要规则。以最典型的“货到票未到”为例也就是常说的暂估入库。采购订单审核后仓库做入库单此时采购发票还没到但货已经是企业资产了月底必须反映在账上。常见做法是系统按模板生成暂估凭证借记“存货”科目贷记“应付账款-暂估”等到采购发票录入并完成匹配再生成一张冲销凭证把暂估的应付转成正式应付。业务动作借方贷方采购入库暂估存货 / 原材料应付账款-暂估收到发票并匹配应付账款-暂估应付账款-供应商付款单审核应付账款-供应商银行存款这套处理逻辑里有两个关键参数值得注意一是税率字段采购订单和发票上的税率不一致时系统按发票税率重新计算进项税差额会落到“材料成本差异”或“待处理财产损益”具体落到哪里取决于模板配置二是金额精度如果物料单价允许四位小数而模板取数只取两位差额就是这么产生的。2.3 工作流卡控审批状态决定入账时机赤龙ERP的工作流不是摆设它直接参与单据状态机。一张采购订单提交后先走审批流审批通过才能被仓库参照生成入库单付款单更是如此未经审批的付款单不会生成财务凭证也不会扣减应付余额。我一般会建议把审批流设计成“业务审批在前、财务复核在后”的两段式。业务经理审批的是数量合不合理、是不是预算内财务复核看的是付款条件、发票信息和往来挂账对不对。两段审批都在工作流引擎里配节点和角色审批通过后单据进入“已审核”状态此时下游模块才能看到这张单。这里有个设计取舍单据审核后就锁定不允许直接修改必须通过红冲或反审核流程处理。因为在途单据一旦改了下游已经生成的凭证就会失去来源依据。第一次用这套系统的人最容易在这上面翻车——想改一张已审核入库单的数量却发现按钮是灰的还以为系统坏了。3. 把系统跑起来Java环境、MySQL初始化与四个关键配置部署这套系统不算难但有几个配置位容易忽略。整个部署流程我拆成四步环境准备、建库导数据、改连接配置、启动验证。3.1 环境准备与拿包赤龙ERP是Java技术路线的开源项目跑起来需要JDK、Maven和MySQL。先用下面的命令确认环境java -version mvn -v mysql --versionJDK版本建议用8或者11Maven 3.6以上基本没问题MySQL最好用5.7或8.0。如果在代码托管平台上搜“赤龙ERP”下载源码包后解压目录结构一般是标准的Spring Boot多模块工程后端模块、前端资源、SQL脚本各占一块。拿到包先别急着启动把sql目录下的初始化脚本打开看一眼里面通常包含建库语句、数据表和基础数据字典。3.2 创建数据库并导入初始化脚本初始化脚本里如果没带建库语句先手动建库。我建议显式指定字符集避免后面出现乱码mysql -u root -p -e CREATE DATABASE erp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; mysql -u root -p erp sql/init.sql第一条命令创建数据库指定utf8mb4_general_ci排序规则第二条把初始化脚本导入。导入过程中如果报错优先看字符集和sql_mode两个方向这个坑我在第5章会详细说。初始化脚本完成后可以用SHOW TABLES;检查表是否齐全重点看有没有erp_voucher、erp_voucher_entry这类财务核心表。3.3 修改连接配置务必打开 multiQueries连接配置在application.yml或application.properties里不同版本位置略有差异。核心配置块长这样spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/erp?useUnicodetruecharacterEncodingutf8mb4serverTimezoneAsia/ShanghaiallowMultiQueriestrue username: erp_user password: your_password注意url里四个参数useUnicodetrue和characterEncodingutf8mb4是中文数据不出乱字的前提serverTimezoneAsia/Shanghai解决MySQL驱动8.x版本对时区的严格校验allowMultiQueriestrue允许多条SQL一起执行某些初始化逻辑和报表查询依赖它不打开可能会遇到奇怪的“SQL语法错误”。3.4 启动服务登录后第一件事后端是Spring Boot工程开发环境直接跑mvn spring-boot:run生产环境打成Jar包再跑更可靠mvn clean package -DskipTests java -jar target/erp.jar看到类似Tomcat started on port 8080的日志就说明服务起来了。浏览器打开登录页初始化脚本里一般会预置一个管理员账号具体账号密码以脚本里的INSERT INTO语句为准。登录后第一件事不是录单据而是去建公司组织架构、设置会计期间和期初余额。没有正确的期初数据后面跑出来的报表全是无源之水。4. 实操一条业务链路采购订单到付款凭证的完整走单部署跑通只是开始真正检验系统的是能不能完整走通一条采购付款链路。我按实际实施习惯把操作拆成四个小节每一步都标出关键参数和验证点。4.1 基础档案物料、供应商、会计科目先落库没有档案就录单据系统会卡在必填项上。先建三类基础数据物料档案、供应商档案、会计科目。物料档案里除了名称、规格、计量单位要重点确认“存货科目”是否已映射到位。比如原材料A对应1403原材料科目库存商品对应1405库存商品。供应商档案则要挂“应付账款”科目并设置默认税率比如13%。会计科目不是只建总账科目就完事辅助核算维度很关键。往来科目建议启用“供应商/客户”辅助核算这样总账余额能穿透到具体往来单位。这一步配置不到位后面查“欠XX供应商多少钱”就得翻明细账效率差很多。4.2 采购订单到入库单数量、单价、税率怎么影响金额档案齐了之后录一张采购订单数量10件、单价100元、税率13%。提交后走审批流审批通过后仓库参照订单生成入库单。入库单审核通过的那一刻系统按暂估逻辑生成库存流水并在财务层挂起一笔暂估应付。这里要看两个点一是入库数量是否参照了订单数量且不允许超收二是单价是取订单价还是取供应商最新价目表。我一般会把订单单价作为默认值防止价目表维护不及时导致入库金额异常。以下是查询库存流水的典型SQLSELECT material_code, batch_no, quantity, unit_price, amount FROM erp_inventory_transaction WHERE source_type INBOUND AND source_bill_no PO20250301001;这条SQL用来核对入库流水里的数量、单价、金额是否与订单一致。金额字段的值 数量 × 单价单价乘税率后的价税合计会单独落到税务字段不要在这里出现四舍五入误差。4.3 发票匹配与付款应付核销和凭证生成收到供应商发票后在采购模块做“发票匹配”录入发票号、发票金额和税额选择关联的入库单。匹配完成后系统自动把暂估应付转为正式应付这个动作在凭证层面会自动生成一张冲销凭证和一张正式入账凭证。接着做付款单选择要核销的发票填实际付款金额、付款方式和银行账户。付款单走财务复核审批审批通过后生成付款凭证借贷方向为借记“应付账款-供应商”贷记“银行存款”。到这里一笔业务从订单、入库、发票、付款到凭证就全部打通了。凭证分录生成后可以在凭证列表里直接查看也可以用SQL验证SELECT subject_code, subject_name, debit_amount, credit_amount, source_no FROM erp_voucher_entry WHERE voucher_date 2025-03-01 AND source_type PAYMENT;注意source_no字段它记录了这张凭证的来源单号。合理的设计里业务单据号、库存流水号、凭证号三者应该能互相追溯这也是“闭环”两个字最直观的体现。4.4 用三条SQL验证闭环是否真的闭合跑完链路后做三个校验。第一凭证借贷平衡SELECT voucher_no, SUM(debit_amount) AS total_debit, SUM(credit_amount) AS total_credit FROM erp_voucher_entry WHERE voucher_date 2025-03-01 GROUP BY voucher_no HAVING ABS(SUM(debit_amount) - SUM(credit_amount)) 0.01;第二应付往来余额应与发票金额一致SELECT supplier_code, SUM(invoice_amount) AS total_invoice, SUM(payment_amount) AS total_payment, SUM(invoice_amount) - SUM(payment_amount) AS balance FROM erp_supplier_balance GROUP BY supplier_code;第三库存金额和存货科目余额对得上SELECT material_code, SUM(quantity * unit_price) AS inventory_amount FROM erp_inventory_balance GROUP BY material_code;三条SQL全是体现“财务业务一体化的闭环”的典型查询。第二条如果balance不为零说明发票或付款没走完第三条如果和总账存货科目余额有差异优先查暂估和冲销凭证。5. 避坑排查跑通赤龙ERP的常见问题部署和实操过程中踩过的坑我挑了五个最常见的写在这里每条都是“现象→原因→解决”的结构照着排查能省不少时间。5.1 库存账和总账对不上现象库存模块的结存金额和总账存货科目余额差了一截。原因最常见是入库单审核了、库存流水有了但财务模板没有触发凭证生成或者是暂估与冲销的时序颠倒票先到了但入库单还没审核。解决先查单据状态看入库单是否处于“已审核”且“已生成凭证”状态。如果没生成确认凭证模板是否已绑定到该入库单类型如果模板绑了还是不生成看系统参数里是否开启了“自动生成凭证”开关。这个开关在实施时容易被关掉。5.2 金额总是差几分钱现象同一张采购单订单金额、入库金额、凭证金额三个数对不上差几毛甚至几分。原因单价小数位和金额小数位设置不一致。单价配了四位小数金额只保留两位中间一乘一舍差额就出来了另一种可能是价税分离时含税价和不含税价的换算顺序反了。解决统一全局精度参数单价四位小数、金额两位小数是常见配置更重要是确认模板取数取的是不含税金额还是含税金额。采购入库按不含税入账进项税单独列示不要在含税金额上直接乘税率。5.3 凭证借贷方向反了或者科目完全不对现象入库生成的凭证是“借应付账款贷存货”正好反着。原因凭证模板里的科目方向配置错误或者模板绑定到了错误的单据类型上。这种情况往往出现在复制模板时——复制了一张销售出库的模板改了下名称却忘了改借贷方向。解决打开凭证模板维护界面逐项检查“借方科目”“贷方科目”和“取值表达式”。改完模板后要重新走一笔测试单据验证不要只改配置不验凭证这是踩坑之后最深刻的教训。5.4 审批流卡在某个节点不动待办也看不到现象单据提交后状态一直停在审批中审批人的待办列表里却什么都看不到。原因审批节点配置了角色但该角色的用户没有被赋权或者节点上的审批方式设成了“会签”需要多个人全部审批其中一个人没有账号导致流程挂死。解决在权限管理里确认审批人角色已勾选对应菜单和数据权限查看工作流引擎的任务表定位当前任务卡的审批人ID直接查这个用户是否存在、是否被停用。生产环境建议把审批方式设置成“或签”一个人通过即可流转。5.5 初始化脚本导不进去现象执行init.sql时报错常见的有Unknown collation或Data too long。原因高版本MySQL默认排序规则是utf8mb4_0900_ai_ci而老的初始化脚本用的是utf8mb4_general_ci另一种是sql_mode里的STRICT_TRANS_TABLES限制了超长数据写入。解决建库时显式指定排序规则如前面的COLLATE utf8mb4_general_ci如果脚本里写了排序规则先全局搜一下统一替换。实在不行在MySQL配置里把sql_mode调整为NO_ENGINE_SUBSTITUTION再导入。6. 进阶二次开发时的工作流扩展、凭证模板调整与报表验证系统跑顺之后接下来就是二次开发。这里只讲三个最常被问到的小技巧都围绕“工作流”和“报表”展开。第一个技巧是给采购订单加一道二级审批。默认流程是“部门经理审批”业务场景变成单笔金额超过5万的采购需要总经理二次审批。在工作流设计器里复制原审批节点新增一个节点挂到原节点之后审批人类型选“岗位”岗位选“总经理”提交测试单据就会看到流程先走部门经理再走总经理。注意新节点要勾选“金额条件”用amount 50000作为分支条件金额小的单据不会走到二级审批。第二个技巧是凭证模板的科目映射调整。比如你不想所有存货都落到同一个科目想按物料分类落到不同原材料科目就在模板的科目取值表达式里加一个判断函数按物料档案上的分类字段取不同科目编码。改完模板后必须重跑历史涉及的单据重生成凭证或者至少做一笔测试单据验证。第三个技巧是报表扩展。报表查询不要直接改ERP核心表建一个视图是更稳妥的做法把库存流水和凭证分录关联起来CREATE VIEW v_inventory_finance AS SELECT t.material_code, t.source_bill_no, v.voucher_no, v.debit_amount, v.credit_amount FROM erp_inventory_transaction t LEFT JOIN erp_voucher_entry v ON v.source_no t.source_bill_no;验证报表和闭环是否真正跑通我有一套强制动作月底做完月结随机挑三张业务单据从总账余额明细点开凭证再通过source_no跳回原始单据核对金额、数量、往来单位三个字段。任何一个字段对不上都要在月结前处理完而不是等审计来问。从那以后我每次给企业部署完都会用这套“凭证回跳单据”的方式把上月数据完整核查一遍确认无误后才交接给财务。赤龙ERP的价值不在菜单多而在业务动作能不能被财务准确感知单据和凭证这两端只要有一端失真系统就退化成两个互不相干的工具。希望帮到你。本文还有配套的精品资源点击获取