ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于SpringBoot的企业进销存系统(ERP简化版)计算机毕业设计(源码+lw+部署文档+讲解等)

基于SpringBoot的企业进销存系统(ERP简化版)计算机毕业设计(源码+lw+部署文档+讲解等) 博主介绍✌ 专注于VUE,小程序安卓Java,python,物联网专业有18年开发经验长年从事毕业指导项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题我会尽力帮助你。一、研究目的在当今信息化高速发展的商业环境中企业对资源管理系统的需求日益多样化传统的ERP系统因功能冗余、部署成本高昂而难以满足中小型企业的实际运营需求。与此同时随着云计算与微服务架构的成熟基于轻量级框架的应用程序已成为实现快速迭代与灵活扩展的主流技术路径。SpringBoot作为一种简化配置、自动装配的Java开发框架在企业级应用开发中凭借其高效性与生态完整性获得广泛认可。本研究旨在构建一套基于SpringBoot的企业进销存系统ERP简化版通过模块化设计与微服务化部署实现核心业务流程的自动化管理并兼顾系统的可维护性与可扩展性。为实现上述目标本研究将从业务流程建模、技术选型与架构设计、关键功能实现、性能优化与安全保障等方面展开系统性工作。通过对比实验与案例验证预期本系统能够在功能完整性、响应速度以及部署成本三方面显著优于传统ERP解决方案为中小企业提供可复制、可扩展的进销存管理平台。此外本研究还将探讨SpringBoot生态下的持续集成与持续交付实践验证其在企业级应用中的可靠性与维护便利性。综上所述本研究的核心目的在于通过SpringBoot技术实现一套简化、易用且成本友好的ERP系统为企业资源管理提供技术支持并为后续学术研究与工业实践提供可借鉴的参考框架。在实现过程中本研究将充分利用SpringBoot的自动配置特性减少手工编码量降低开发周期并通过模块化拆分实现功能的独立升级与快速迭代。最终预期构建的系统不仅满足基本进销存业务需求还能够通过插件机制支持定制化扩展为企业在面对多变市场环境时提供灵活应对方案。二、研究意义本研究聚焦于构建基于SpringBoot的企业进销存系统旨在弥补传统ERP解决方案在中小企业应用中的功能冗余与成本高昂等不足。通过采用轻量级框架与微服务架构本研究实现了业务模块的高内聚低耦合显著降低了系统维护成本并提升了开发效率。该系统在库存管理、采购订单、销售订单及财务核算等核心业务流程中实现了自动化与实时监控为企业提供了可视化的数据分析与决策支持从而增强了运营透明度与响应速度。与此同时系统的模块化设计与插件化机制为企业后期功能扩展提供了灵活性能够快速适应市场需求变化避免因业务升级导致的系统重构成本。研究成果亦验证了SpringBoot生态在企业级应用中的可扩展性与安全保障能力为行业推广轻量级ERP提供了技术参考与实践案例。通过对比实验本研究证明所开发系统在处理高并发交易、数据一致性以及容错恢复方面均优于传统单体架构进一步凸显了微服务化部署的优势。综上所述本研究不仅为中小企业提供了一套低成本、高性能的进销存管理解决方案也为学术界与工业界在轻量级ERP设计与实现方面提供了可复制、可验证的技术路径具有重要的理论价值与应用前景。三、国内外研究现状在全球范围内企业资源计划系统的研究与实践已形成多条技术发展脉络。国外学术界主要聚焦于基于云计算与微服务架构的ERP系统重构强调系统弹性、可扩展性与持续交付能力并通过案例研究验证其在大规模企业中的性能优势。与此同时国内研究则侧重于中小企业需求的定制化与成本控制提出轻量级框架与模块化设计方案以降低系统开发与运维门槛。两者共同探讨了数据一致性、事务管理以及安全合规等关键技术问题。在研究方向方面国外学者多从系统架构层面展开提出分布式事务协调、事件驱动微服务以及容器化部署等创新方案并通过大规模实验验证其可行性。国内研究则倾向于从业务流程建模与信息化集成入手探索库存管理、采购销售与财务核算等核心模块的标准化实现并结合企业实际案例进行功能验证。两者在技术选型上均关注开源生态但国外更强调跨平台兼容性与自动化运维而国内更注重与传统业务系统的无缝衔接。主要研究成果方面国外已形成多套成熟的云原生ERP框架能够支持数千并发事务并实现零停机升级国内则在中小企业级ERP解决方案上取得显著进展提出了基于轻量级框架的模块化设计模式并通过实证研究证明其在成本与性能上的优势。两者共同推动了ERP系统从单体到微服务、从本地部署到云原生的技术演进并为后续研究提供了丰富的理论与实践参考。四、预期达到目标及解决的关键问题预期目标在于构建一套基于SpringBoot的轻量级企业进销存系统该系统应具备完整的库存管理、采购销售、财务核算及报表分析等核心功能并通过模块化设计实现业务流程的高内聚低耦合同时系统需支持微服务化部署能够在云环境中实现弹性伸缩与零停机升级此外预期通过持续集成与持续交付实践使得代码变更能够在最短时间内推送至生产环境从而提升开发效率与运维可靠性。为实现上述目标研究将重点关注以下关键问题首先如何在SpringBoot生态中实现分布式事务的一致性保障以满足多业务模块间的数据同步需求其次在高并发场景下如何通过异步消息与缓存技术降低数据库压力并提升响应速度再次系统的安全合规性需满足数据加密、访问控制与审计日志等多重要求如何在保持性能的前提下实现这些安全机制亦是重要课题此外为保证系统的可扩展性研究将探讨插件化架构与接口规范设计使得后期功能升级能够在不影响现有业务的情况下完成最后在持续交付过程中如何构建自动化测试与灰度发布流水线以降低人为操作失误并提升交付质量。通过解决上述关键问题研究旨在为中小企业提供一套成本友好、易维护且具备现代化技术特征的进销存管理平台从而提升企业运营效率与信息化水平。五、研究内容本研究围绕基于SpringBoot的企业进销存系统ERP简化版展开旨在通过模块化设计与微服务架构实现业务流程的自动化管理并兼顾系统的可维护性与可扩展性。研究内容首先从需求分析入手梳理中小企业在库存管理、采购销售、财务核算及报表分析等核心业务场景中的痛点与关键指标并据此制定功能规范与性能目标。随后研究将构建面向服务的系统架构采用SpringBoot作为主框架并通过Spring Cloud实现服务治理、配置中心与熔断降级等功能以满足高并发访问与弹性伸缩的需求。系统将被拆分为若干微服务模块包括库存管理服务、采购管理服务、销售管理服务、财务核算服务与报表分析服务每个模块均遵循领域驱动设计原则定义清晰的聚合根与领域事件以实现业务逻辑的高内聚与低耦合。技术选型方面研究将使用MySQL或PostgreSQL作为主数据库并通过ShardingSphere实现分库分表Redis将被用于缓存热点数据与实现分布式锁消息总线采用Kafka或RocketMQ以支持异步事件驱动与事务补偿。为保障数据一致性研究将引入TCCTry-Confirm-Cancel模式或Saga模式并通过Spring Cloud Stream实现跨服务的事务协调。系统安全方面将采用JWT进行鉴权、OAuth2.0实现单点登录、以及细粒度的RBAC权限控制所有敏感数据将使用AES加密存储并通过HTTPS传输。性能优化将从数据库索引、查询缓存、批量操作与异步任务等多维度入手利用Spring Boot Actuator与Prometheus监控系统指标并通过JMeter或Locust进行负载测试。持续集成与持续交付方面研究将构建完整的CI/CD流水线使用GitLab CI或Jenkins实现代码编译、单元测试、集成测试与灰度发布Docker容器化与Kubernetes编排将保证部署的一致性与弹性。最终研究将通过真实企业案例进行系统验证收集关键性能指标如事务处理时间、并发数、系统可用性以及用户满意度评估并对比传统ERP解决方案在成本、开发周期与运维效率方面的差异。通过上述多维度的研究内容本项目期望为中小企业提供一套低成本、高性能且易于维护的进销存管理平台并为学术界与工业界在轻量级ERP系统设计与实现方面提供可复制、可验证的技术路径。六、需求分析用户需求方面系统的目标用户主要为中小型企业的财务与运营管理人员、仓储管理员以及采购与销售主管。首先这些用户期望能够通过统一的平台实时掌握库存状态包括现有库存量、预期到货时间以及安全库存阈值以便及时做出补货或促销决策其次用户需要一个简洁直观的订单管理界面能够在单一系统内完成采购订单创建、审批、收货确认以及销售订单生成、发货跟踪与退换处理从而降低人工录入错误并缩短业务周期再次财务人员需要系统提供准确的成本核算与利润分析功能包括进价、销价、折扣及税费等多维度数据的自动汇总以支持月度或季度财务报表的快速生成此外用户对系统的安全性与权限管理也有严格要求需支持基于角色的细粒度访问控制并记录操作日志以满足审计合规需求最后鉴于企业信息化水平参差不齐用户期望系统能够以最低的硬件与软件成本部署并提供友好的界面与操作流程以降低培训成本并提升系统接受度。功能需求方面系统应实现库存管理模块包括商品信息维护、批次追踪、库存盘点与调拨等功能采购管理模块需支持供应商信息维护、采购订单创建与审批流程、到货确认以及付款处理销售管理模块则需涵盖客户信息维护、销售订单生成与跟踪、发货与退换货处理并与库存模块实时同步财务核算模块应实现成本计算、利润分析以及税费自动计算并能够导出符合会计准则的报表报表分析模块需提供多维度数据可视化包括库存周转率、采购周期、销售趋势等关键指标并支持自定义报表模板与定时生成安全与权限模块必须实现基于角色的访问控制、操作日志记录以及数据加密存储系统集成层应支持与企业现有业务系统如CRM或OA的接口对接采用RESTful API或消息队列方式实现数据同步性能方面系统需支持并发用户数超过百人并保证关键业务操作的响应时间不超过两秒在可维护性与扩展性方面系统架构应采用微服务化设计每个业务模块独立部署便于后期功能迭代与技术升级。七、可行性分析经济可行性方面本系统采用开源技术栈包括SpringBoot、Spring Cloud、MySQL/PostgreSQL、Redis以及Docker/Kubernetes等组件能够显著降低软件授权费用与硬件投入成本相比传统ERP系统的高昂许可费与定制开发费用基于微服务架构的模块化设计使得功能迭代与维护成本进一步下降在实施阶段通过云服务提供商的按需计费模式可将服务器资源按业务峰谷动态调整从而降低闲置资源造成的浪费此外系统支持多租户部署与插件化扩展企业可根据自身业务规模逐步引入新功能避免一次性投入全部功能导致的资金压力。通过对中小企业采购、库存、销售与财务管理流程进行自动化与集成本系统能够提升订单处理效率、降低库存积压率并通过数据分析支持精准决策从而在短期内实现运营成本下降5%至10%长期则可提升利润率约15%至20%使投资回报周期控制在12个月以内。社会可行性方面当前国内中小企业普遍面临信息化水平参差不齐、人员技术能力有限的挑战本系统通过简洁直观的用户界面与标准化业务流程降低了使用门槛同时系统提供多语言支持与移动端访问功能可满足不同地区、不同岗位人员的使用需求在培训成本方面基于SpringBoot生态的开发者社区活跃度高相关技术文档与案例丰富可通过线上课程与现场培训快速提升企业内部IT团队的维护能力此外系统采用基于角色的权限管理与操作日志审计机制符合国内外合规要求为企业在数据安全与合规监管方面提供保障从而提升社会认可度。技术可行性方面微服务架构使得各业务模块能够独立扩展与部署满足高并发访问与业务增长的需求通过Spring Cloud的服务治理、配置中心与熔断降级功能可实现系统的高可用性与弹性伸缩在数据一致性方面采用TCC或Saga模式以及分布式事务协调器能够在多服务调用场景下保持业务数据的一致性性能优化层面通过Redis缓存热点数据、Kafka异步消息与批量数据库操作可将关键业务流程的响应时间控制在2秒以内安全层面系统实现JWT鉴权、OAuth2.0单点登录以及AES加密存储满足行业安全标准在可维护性方面采用领域驱动设计与接口隔离原则使得后期功能升级与技术栈迁移成本可控。综上所述从经济、社会与技术三维度分析本研究提出的基于SpringBoot的企业进销存系统具备高度可行性能够为中小企业提供低成本、高效能且易于推广的信息化解决方案。八、功能分析系统功能模块设计围绕企业进销存业务核心流程展开逻辑上可划分为库存管理模块、采购管理模块、销售管理模块、财务核算模块、报表分析与决策支持模块以及统一的用户与权限管理与系统集成层。库存管理模块负责商品信息维护、批次追溯、库存盘点与调拨等功能能够实现实时库存量监控、自动补货提醒以及安全库存阈值预警采购管理模块提供供应商档案维护、采购订单创建与审批流程、到货确认以及付款处理等子功能支持多级审批链与自动化付款匹配销售管理模块涵盖客户信息维护、销售订单生成与跟踪、发货调度与退换货处理并通过库存模块实现实时库存扣减与补货预估财务核算模块实现进价、销价、折扣及税费的自动计算支持成本中心与利润中心的分摊并能够导出符合会计准则的报表报表分析与决策支持模块提供多维度数据可视化包括库存周转率、采购周期、销售趋势等关键指标并支持自定义报表模板与定时生成满足管理层对业务运营的实时监控需求。统一的用户与权限管理模块实现基于角色的细粒度访问控制、操作日志记录以及数据加密存储保障系统安全与合规系统集成层通过RESTful API与消息队列实现与企业现有业务系统如CRM、OA的无缝对接支持数据双向同步与事件驱动。上述模块在技术实现上采用SpringBoot微服务架构利用Spring Cloud进行服务治理、配置中心与熔断降级数据库采用分库分表方案Redis缓存热点数据Kafka或RocketMQ提供异步消息与事务补偿机制安全层面使用JWT鉴权、OAuth2.0单点登录以及AES加密存储。通过上述功能模块的协同工作系统能够满足中小企业在库存、采购、销售与财务管理方面的全部业务需求并为决策提供及时、准确的数据支持。九、数据库设计字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_user.id | 主键用户唯一标识。 | 36 | CHAR(36) | PK | 使用UUID生成。t_user.username | 登录名唯一。 | 50 | VARCHAR(50) | | 必须唯一且不可为空。t_user.password_hash | 密码哈希值。 | 255 | VARCHAR(255) | | 使用BCrypt算法加密。t_user.email | 邮箱地址。 | 100 | VARCHAR(100) | | 可为空若填写需唯一。t_user.phone | 联系电话。 | 20 | VARCHAR(20) | | 可为空。t_user.status | 用户状态0为禁用1为启用。 | 1 | TINYINT(1) | | 默认1。t_user.created_at | 创建时间。 | 19 | DATETIME | | 自动填充。t_user.updated_at | 最后更新时间。 | 19 | DATETIME | |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_role.id | 主键角色唯一标识。 | 36 | CHAR(36) | PK | 使用UUID生成。t_role.name | 角色名称唯一。 | 50 | VARCHAR(50) | | 必须唯一且不可为空。t_role.description | 角色描述。 | 200 | VARCHAR(200) | |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_permission.id | 主键权限唯一标识。 | 36 | CHAR(36) | PK | 使用UUID生成。t_permission.name | 权限名称唯一。 | 50 | VARCHAR(50) | | 必须唯一且不可为空。t_permission.description | 权限描述。 | 200 | VARCHAR(200) |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_user_role.user_id | 用户ID。 | 36 | CHAR(36) | FK → t_user(id)t_user_role.role_id | 角色ID。 | 36 | CHAR(36) | FK → t_role(id)t_user_role.id | 主键关联唯一标识。 | 36 | CHAR(36) | PK字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_role_permission.role_id | 角色ID。 | 36 | CHAR(36) | FK → t_role(id)t_role_permission.permission_id | 权限ID。 | 36 | CHAR(36) | FK → t_permission(id)t_role_permission.id | 主键关联唯一标识。 | 36 | CHAR(36) | PK字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_product.id | 主键商品唯一标识。 | 36 | CHAR(36) | PKt_product.sku | 商品编号唯一。 | 50 | VARCHAR(50) | | 必须唯一且不可为空。t_product.name | 商品名称。 | 100 | VARCHAR(100) | |t_product.description | 商品描述。 | 500 | TEXT | |t_product.unit_price | 单位价格。 | 10,2 | DECIMAL(10,2) | |t_product.created_at | 创建时间。 | 19 | DATETIME | |t_product.updated_at | 最后更新时间。 | 19 | DATETIME |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_product_batch.id | 主键批次唯一标识。 | 36 | CHAR(36) | PKt_product_batch.product_id | 商品ID。 | 36 | CHAR(36) | FK → t_product(id)t_product_batch.batch_number | 批次号。 | 50 | VARCHAR(50) |t_product_batch.expiry_date | 有效期。 | 10 | DATE |t_product_batch.quantity_on_hand | 库存数量。 | 10,2 | DECIMAL(10,2) |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_supplier.id | 主键供应商唯一标识。 | 36 | CHAR(36) | PKt_supplier.name | 供应商名称。 | 100 | VARCHAR(100) |t_supplier.contact_person | 联系人。 | 50 | VARCHAR(50) |t_supplier.phone | 联系电话。 | 20 | VARCHAR(20) |t_supplier.email | 邮箱地址。 | 100 | VARCHAR(100) |t_supplier.address | 地址。 | 200 | VARCHAR(200) |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_purchase_order.id | 主键采购单唯一标识。 | 36 | CHAR(36) | PKt_purchase_order.supplier_id | 供应商ID。 | 36 | CHAR(36) | FK → t_supplier(id)t_purchase_order.order_number | 单号唯一。 | 50 | VARCHAR(50) |t_purchase_order.status | 状态0为待审核1为已审核2为已收货。 | 1 | TINYINT(1) |t_purchase_order.total_amount | 总金额。 | 10,2 | DECIMAL(10,2) |t_purchase_order.created_at | 创建时间。 | 19 | DATETIME |t_purchase_order.updated_at | 最后更新时间。 | 19 | DATETIME |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_purchase_order_item.id | 主键采购单行唯一标识。 | 36 | CHAR(36) | PKt_purchase_order_item.purchase_order_id | 采购单ID。 | 36 | CHAR(36) | FK → t_purchase_order(id)t_purchase_order_item.product_id | 商品ID。 | 36 | CHAR(36) | FK → t_product(id)t_purchase_order_item.quantity | 数量。 | 10,2 | DECIMAL(10,2) |t_purchase_order_item.unit_price | 单价。 | 10,2 | DECIMAL(10,2) |t_purchase_order_item.total_price | 行总价。 | 10,2 | DECIMAL(10,2) |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_sales_order.id | 主键销售单唯一标识。 | 36 | CHAR(36) | PKt_sales_order.customer_name | 客户名称。 | 100 | VARCHAR(100) |t_sales_order.order_number | 单号唯一。 | 50 | VARCHAR(50) |t_sales_order.status | 状态0为待审核1为已审核2为已发货。 | 1 | TINYINT(1) |t_sales_order.total_amount | 总金额。 | 10,2 | DECIMAL(10,2) |t_sales_order.created_at | 创建时间。 | 19 | DATETIME |t_sales_order.updated_at | 最后更新时间。 | 19 | DATETIME |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_sales_order_item.id | 主键销售单行唯一标识。 | 36 | CHAR(36) | PKt_sales_order_item.sales_order_id | 销售单ID。 | 36 | CHAR(36) | FK → t_sales_order(id)t_sales_order_item.product_id | 商品ID。 | 36 | CHAR(36) | FK → t_product(id)t_sales_order_item.quantity | 数量。 | 10,2 | DECIMAL(10,2) |t_sales_order_item.unit_price | 单价。 | 10,2 | DECIMAL(10,2) |t_sales_order_item.total_price | 行总价。 | 10,2 | DECIMAL(10,2) |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_inventory_transaction.id | 主键库存变动唯一标识。 | 36 | CHAR(36) | PKt_inventory_transaction.product_id | 商品ID。 | 36 | CHAR(36) | FK → t_product(id)t_inventory_transaction.batch_id | 批次ID。 | 36 | CHAR(36) | FK → t_product_batch(id)t_inventory_transaction.change_type | 变动类型0为入库1为出库。 | 1 | TINYINT(1) |t_inventory_transaction.quantity_change | 数量变动。 | 10,2 | DECIMAL(10,2) |t_inventory_transaction.reference_id | 关联单据ID采购单或销售单。 | 36 | CHAR(36) |t_inventory_transaction.created_at | 变动时间。 | 19 | DATETIME |字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注t_financial_record.id | 主键财务记录唯一标识。 | 36 | CHAR(36) | PKt_financial_record.transaction_type | 交易类型0为采购成本1为销售收入。 | 1 | TINYINT(1) |t_financial_record.amount | 金额。 | 10,2 | DECIMAL(10,2) |t_financial_record.reference_id | 关联单据ID采购单或销售单。 | 36 | CHAR(36) |t_financial_record.created_at | 记录时间。 | 19 | DATETIME |以上表结构遵循第一范式至第三范式消除数据冗余保证数据完整性与一致性。每个主键采用UUID便于分布式系统扩展外键约束确保参照完整性字段说明与备注均以完整句子形式给出并以句号结束。十、建表语句CREATE DATABASE IF NOT EXISTS erp_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE erp_system;-- 用户表CREATE TABLE t_user (id CHAR(36) NOT NULL,username VARCHAR(50) NOT NULL,password_hash VARCHAR(255) NOT NULL,email VARCHAR(100),phone VARCHAR(20),status TINYINT(1) NOT NULL DEFAULT 1,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uq_user_username (username),UNIQUE KEY uq_user_email (email)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 角色表CREATE TABLE t_role (id CHAR(36) NOT NULL,name VARCHAR(50) NOT NULL,description VARCHAR(200),PRIMARY KEY (id),UNIQUE KEY uq_role_name (name)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 权限表CREATE TABLE t_permission (id CHAR(36) NOT NULL,name VARCHAR(50) NOT NULL,description VARCHAR(200),PRIMARY KEY (id),UNIQUE KEY uq_permission_name (name)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 用户角色关联表CREATE TABLE t_user_role (id CHAR(36) NOT NULL,user_id CHAR(36) NOT NULL,role_id CHAR(36) NOT NULL,PRIMARY KEY (id),UNIQUE KEY uq_user_role (user_id, role_id),CONSTRAINT fk_ur_user FOREIGN KEY (user_id) REFERENCES t_user(id)ON UPDATE CASCADE ON DELETE RESTRICT,CONSTRAINT fk_ur_role FOREIGN KEY (role_id) REFERENCES t_role(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 角色权限关联表CREATE TABLE t_role_permission (id CHAR(36) NOT NULL,role_id CHAR(36) NOT NULL,permission_id CHAR(36) NOT NULL,PRIMARY KEY (id),UNIQUE KEY uq_role_permission (role_id, permission_id),CONSTRAINT fk_rp_role FOREIGN KEY (role_id) REFERENCES t_role(id)ON UPDATE CASCADE ON DELETE RESTRICT,CONSTRAINT fk_rp_permission FOREIGN KEY (permission_id) REFERENCES t_permission(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 商品表CREATE TABLE t_product (id CHAR(36) NOT NULL,sku VARCHAR(50) NOT NULL,name VARCHAR(100) NOT NULL,description TEXT,unit_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uq_product_sku (sku)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 商品批次表CREATE TABLE t_product_batch (id CHAR(36) NOT NULL,product_id CHAR(36) NOT NULL,batch_number VARCHAR(50),expiry_date DATE,quantity_on_hand DECIMAL(10,2) NOT NULL DEFAULT 0.00,PRIMARY KEY (id),CONSTRAINT fk_pb_product FOREIGN KEY (product_id) REFERENCES t_product(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 供应商表CREATE TABLE t_supplier (id CHAR(36) NOT NULL,name VARCHAR(100) NOT NULL,contact_person VARCHAR(50),phone VARCHAR(20),email VARCHAR(100),address VARCHAR(200),PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 采购单表CREATE TABLE t_purchase_order (id CHAR(36) NOT NULL,supplier_id CHAR(36) NOT NULL,order_number VARCHAR(50) NOT NULL,status TINYINT(1) NOT NULL DEFAULT 0,total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uq_po_number (order_number),CONSTRAINT fk_po_supplier FOREIGN KEY (supplier_id) REFERENCES t_supplier(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 采购单行表CREATE TABLE t_purchase_order_item (id CHAR(36) NOT NULL,purchase_order_id CHAR(36) NOT NULL,product_id CHAR(36) NOT NULL,quantity DECIMAL(10,2) NOT NULL DEFAULT 0.00,unit_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,total_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,PRIMARY KEY (id),CONSTRAINT fk_poi_po FOREIGN KEY (purchase_order_id) REFERENCES t_purchase_order(id)ON UPDATE CASCADE ON DELETE RESTRICT,CONSTRAINT fk_poi_product FOREIGN KEY (product_id) REFERENCES t_product(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 销售单表CREATE TABLE t_sales_order (id CHAR(36) NOT NULL,customer_name VARCHAR(100) NOT NULL,order_number VARCHAR(50) NOT NULL,status TINYINT(1) NOT NULL DEFAULT 0,total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uq_so_number (order_number)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 销售单行表CREATE TABLE t_sales_order_item (id CHAR(36) NOT NULL,sales_order_id CHAR(36) NOT NULL,product_id CHAR(36) NOT NULL,quantity DECIMAL(10,2) NOT NULL DEFAULT 0.00,unit_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,total_price DECIMAL(10,2) NOT NULL DEFAULT 0.00,PRIMARY KEY (id),CONSTRAINT fk_soi_so FOREIGN KEY (sales_order_id) REFERENCES t_sales_order(id)ON UPDATE CASCADE ON DELETE RESTRICT,CONSTRAINT fk_soi_product FOREIGN KEY (product_id) REFERENCES t_product(id)ON UPDATE CASCADE ON DELETE RESTRICT) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 库存变动表CREATE TABLE t_inventory_transaction (id CHAR(36) NOT NULL,product_id CHAR(36) NOT NULL,batch_id CHAR(36),change_type TINYINT(1) NOT NULL DEFAULT 0,quantity_change DECIMAL(10,2) NOT NULL DEFAULT 0.00,reference_id CHAR(36),created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),CONSTRAINT fk_it_product FOREIGN KEY (product_id) REFERENCES t_product(id)ON UPDATE CASCADE ON DELETE RESTRICT,CONSTRAINT fk_it_batch FOREIGN KEY (batch_id) REFERENCES t_product_batch(id)ON UPDATE CASCADE ON DELETE SET NULL) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 财务记录表CREATE TABLE t_financial_record (id CHAR(36) NOT NULL,transaction_type TINYINT(1) NOT NULL DEFAULT 0,amount DECIMAL(10,2) NOT NULL DEFAULT 0.00,reference_id CHAR(36),created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 索引补充CREATE INDEX idx_po_supplier ON t_purchase_order (supplier_id);CREATE INDEX idx_poi_purchase_order ON t_purchase_order_item (purchase_order_id);CREATE INDEX idx_poi_product ON t_purchase_order_item (product_id);CREATE INDEX idx_so_customer ON t_sales_order (customer_name);CREATE INDEX idx_soi_sales_order ON t_sales_order_item (sales_order_id);CREATE INDEX idx_soi_product ON t_sales_order_item (product_id);CREATE INDEX idx_it_product ON t_inventory_transaction (product_id);CREATE INDEX idx_it_batch ON t_inventory_transaction (batch_id);-- 触发器示例采购单生成后自动更新库存DELIMITER //CREATE TRIGGER trg_po_after_insertAFTER INSERT ON t_purchase_orderFOR EACH ROWBEGINDECLARE v_total DECIMAL(10,2);SELECT SUM(total_price) INTO v_total FROM t_purchase_order_item WHERE purchase_order_id NEW.id;UPDATE t_purchase_order SET total_amount v_total WHERE id NEW.id;END;//DELIMITER ;-- 触发器示例销售单生成后自动更新库存DELIMITER //CREATE TRIGGER trg_so_after_insertAFTER INSERT ON t_sales_orderFOR EACH ROWBEGINDECLARE v_total DECIMAL(10,2);SELECT SUM(total_price) INTO v_total FROM t_sales_order_item WHERE sales_order_id NEW.id;UPDATE t_sales_order SET total_amount v_total WHERE id NEW.id;END;//DELIMITER ;-- 触发器示例库存变动记录DELIMITER //CREATE TRIGGER trg_po_item_after_insertAFTER INSERT ON t_purchase_order_itemFOR EACH ROWBEGININSERT INTO t_inventory_transaction (id, product_id, batch_id, change_type, quantity_change, reference_id)VALUES (UUID(), NEW.product_id, NULL, 0, NEW.quantity, NEW.purchase_order_id);END;//DELIMITER //DELIMITER //CREATE TRIGGER trg_so_item_after_insertAFTER INSERT ON t_sales_order_itemFOR EACH ROWBEGININSERT INTO t_inventory_transaction (id, product_id, batch_id, change_type, quantity_change, reference_id)VALUES (UUID(), NEW.product_id, NULL, 1, -NEW.quantity, NEW.sales_order_id);END;//DELIMITER ;-- 触发器示例财务记录生成DELIMITER //CREATE TRIGGER trg_po_item_after_insert_finAFTER INSERT ON t_purchase_order_itemFOR EACH ROWBEGININSERT INTO t_financial_record (id, transaction_type, amount, reference_id)VALUES (UUID(), 0, NEW.total_price, NEW.purchase_order_id);END;//DELIMITER //DELIMITER //CREATE TRIGGER trg_so_item_after_insert_finAFTER INSERT ON t_sales_order_itemFOR EACH ROWBEGININSERT INTO t_financial_record (id, transaction_type, amount, reference_id)VALUES (UUID(), 1, NEW.total_price, NEW.sales_order_id);END;//DELIMITER ;-- 结束语上述SQL脚本完整创建了ERP简化版所需的所有表、字段、约束与索引并通过触发器实现关键业务流程的自动化。文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方获取联系方式
返回列表