一个人做产品的 100 天:从想法到上线

没有团队,没有融资,一个人从零搭建起一套制造业 MES 系统。这篇文章复盘我这 100 天的真实经历——包括技术选型、踩过的坑,以及最重要的:我是怎么活下来的。


一、为什么是制造业?

2025 年初,我还是一个在深圳写代码的程序员。

有一天,一个做印刷包装的朋友找我吐槽:他们工厂还在用 Excel 管生产。几十台机器,上百个工人,每天的工单靠微信群发,质检数据抄在本子上,月底对账要翻三天。

我问:"市面上没有现成的系统吗?"

他说:"有,一套几十万,而且不贴合我们的流程。小厂根本用不起。"

那一刻我意识到——中国有几万家中小型制造工厂,他们的数字化需求,被严重忽视了。

这就是 MqCode 的起点。


二、技术选型:为什么是这套组合拳?

决定做之后,第一关是技术选型。我一个人开发,时间就是生命。最终选定了这套技术栈:

层级技术理由
后端Spring Boot 3 + MyBatisJava 生态成熟,企业客户信任度高
前端Vue 3 + Element Plus组件库完善,开发效率高
移动端uni-app (Vue 3)一套代码搞定 App + 小程序 + H5
数据库MySQL 8 + Redis经典组合,运维简单
脚手架若依框架开箱即用的后台管理,省掉 70% 基础工作

选若依框架是我做得最正确的决定之一。

它的用户管理、角色权限、菜单管理、代码生成器,让我跳过了所有"重复造轮子"的环节,直接进入业务开发。第一周我就搭好了一个可用的后台骨架。

独立开发者的第一原则:不要重新发明轮子。 用好开源框架,把时间花在业务差异化上。

📌 开源声明

本项目后端基于 RuoYi 进行二次开发,前端基于 RuoYi-Vue 前端框架,移动端基于 RuoYi-App。感谢若依开源社区及所有贡献者。


三、第一个月:搭骨架,踩坑无数

3.1 多数据源的噩梦

印刷包装行业有个特点:工厂往往已经有一套旧的 ERP 系统。我们的 MES 不能要求客户推翻重来,必须和现有系统共存。

这意味着——我需要同时连接 MySQL(自己的系统)、SQL Server(客户的旧 ERP)、甚至 Firebird(某些老旧的印刷软件)。

Spring Boot 的多数据源配置比想象中复杂得多。不是配几个 DataSource Bean 就完事了,事务管理才是大坑。

// 错误示范:这样切换数据源,事务根本不会回滚
@Transactional  // 默认走 master 的 TransactionManager
public void syncOrder() {
    jdbcTemplate.execute("INSERT INTO ..."); // 这是 SQL Server
    // 如果这里抛异常,上面的 INSERT 已经提交了!
}

// 正确做法:必须显式指定 TransactionManager
@Transactional(transactionManager = "hsmesTransactionManager")
public void syncOrder() {
    // ...
}

这个问题让我卡了整整三天。最后翻遍了 Spring 官方文档才搞清楚:每个数据源需要独立的 DataSourceTransactionManager,而且 MyBatis 的 SqlSessionTemplate 必须绑定正确的事务管理器。

3.2 前后端权限的"最后一公里"

若依框架自带 RBAC 权限模型,用户-角色-菜单三级控制。但实际业务场景远比这复杂。

比如:一个质检员只能看到自己负责的机台数据,一个车间主任只能看到本车间的生产任务。这是"数据权限",不是简单的"菜单权限"。

我的做法是在 MyBatis 拦截器层面注入数据权限过滤条件:

@DataScope(deptAlias = "d", userAlias = "u")
public List<ProductionOrder> selectOrderList(ProductionOrder order);

通过自定义注解 @DataScope,在 SQL 执行前动态拼接 WHERE 条件,实现对不同角色返回不同范围的数据。这个设计后来成为了整个系统的权限基石。


四、第二个月:死磕业务逻辑

技术框架搭好后,真正的挑战来了:我不懂印刷包装行业。

4.1 在工厂待了一周

我搬了一张桌子坐到朋友的工厂车间里,看工人怎么操作机器,看质检员怎么记录数据,看车间主任怎么排产。

一周下来,我画了 20 多张流程图。最大的收获是理解了 MES 的核心不是技术,是流程

印刷包装的典型流程:

接单 → 制版 → 印刷 → 覆膜 → 烫金 → 模切 → 质检 → 出货

每一步都有不同的工艺参数、不同的质量标准、不同的报工方式。我需要设计的不是一个"通用 MES",而是贴合这个行业真实流程的系统。

4.2 质检模块是最难啃的骨头

印刷行业的质量控制特别复杂:

  • IPQC(制程检验):每道工序完成后都要抽检

  • IPFQC(制程最终检验):关键工序的首件必须检验

  • FQC(成品检验):出货前全检或抽检

而且不同的产品有不同的质检标准——色差、套印精度、覆膜牢度、烫金位置……每一个指标都需要不同的判定逻辑。

我花了两周设计质检模板系统:允许工厂自定义质检指标、自定义判定规则、自定义缺陷分类。这成为了 MqCode 最有竞争力的功能之一。


五、第三个月:移动端从 0 到 1

后台管理系统只能满足办公室人员。车间里的操作工、质检员、送货员,他们需要的是手机端。

5.1 为什么选 uni-app

摆在面前的选择是:原生 App(成本高)、小程序(功能受限)、H5(体验差)、uni-app。

最终选 uni-app,理由很直接:我一个人开发,必须一套代码覆盖所有端。

uni-app 的 Vue 3 版本当时刚出不久,坑不少。最让我头疼的是条件编译——同一套代码在不同平台表现不一致。

// uni-app 条件编译:不同平台走不同逻辑
// #ifdef APP-PLUS
// App 端可以调用原生能力
plus.camera.getCamera()
// #endif

// #ifdef MP-WEIXIN
// 小程序只能用 wx API
wx.chooseImage()
// #endif

// #ifdef H5
// H5 用浏览器 API
navigator.mediaDevices.getUserMedia()
// #endif

这段代码让我深刻理解了跨平台开发的本质:不是写一套完美适配所有的代码,而是管理好不同平台的差异。

5.2 移动端 CRM 的设计取舍

移动端我只做了 CRM 模块(客户、商机、合同、售后),没有把整个 MES 搬上去。原因很简单:

  • 车间操作工用手机报工 → 体验太差,不如扫码枪 + PC

  • 但销售外出拜访客户 → 手机端是刚需

做产品要学会做减法。 不是功能越多越好,而是每个端只做最适合的事。


六、这 100 天我学到了什么

6.1 技术不是最大的瓶颈

坦白说,MqCode 的技术架构没有特别"炫酷"的东西。Spring Boot + Vue + uni-app,全是成熟技术。真正的难点在于:

  • 理解行业:不懂业务写不出好产品

  • 做减法:一个人资源有限,砍功能比加功能更需要勇气

  • 持续迭代:第一版永远是垃圾,关键是快速验证、快速修改

6.2 不开源,靠什么建立信任?

MqCode 目前没有开源——这是一个商业产品,承载着公司的核心业务逻辑。

但不开源不代表闭门造车。我选择了另一条路:写技术文章,分享开发过程中的思考和方案。

比如这篇文章里提到的多数据源方案、质检模板设计、uni-app 条件编译经验——这些不涉及核心商业代码,但能让同行看到你的技术深度。

事实上,公众号就是我的"开源"。代码不开源,但思路可以公开。通过持续输出高质量的技术内容,一样能建立行业影响力。

已经有客户告诉我:"我是看了你的文章,觉得你懂这个行业,才联系你的。"

开源不是唯一的信任杠杆。持续公开的思考和输出,本身就是一种信用资产。

6.3 一个人也能做产品

100 天前,我以为做一套企业级系统需要至少 5 个人的团队。

100 天后,我一个人完成了后端、前端、移动端、数据库设计、行业调研、产品规划。

不是因为我多厉害,而是因为:

  1. 用了若依框架,省掉 70% 基础工作量

  2. 选了成熟技术栈,不折腾新框架

  3. 聚焦一个垂直行业,不做大而全


七、下一步

MqCode 目前还在早期阶段。接下来我的计划:

  • 🎯 Q3:完善生产排程模块,补齐 MES 最后一块拼图

  • 🎯 Q4:接入 AI,用大模型做质检缺陷自动识别

  • 🎯 明年:从印刷包装扩展到其他离散制造业


如果你也在独立开发产品,或者对制造业数字化感兴趣,欢迎关注这个公众号。我会持续分享从代码到产品的全过程——包括成功的经验,也包括踩过的坑。

一个人的产品之路,不孤单。👇

本文首发于微信公众号「MqCode」,欢迎自由转载。 作者:MqCode,全栈开发者,印刷包装行业 MES + CRM 系统独立开发者。

源码下载地址: https://pan.quark.cn/s/a4b39357ea24 谷歌公司设计了一款无费用且具备开源特性的网络浏览器,名为Chrome,因其卓越的速度、稳定性和安全性而广受赞誉。该浏览器运用了前沿的Web渲染引擎Blink以及JavaScript引擎V8,旨在保障网页载入与脚本运行的卓越效能。为应对无网络环境下的Chrome安装需求,特别准备了离线安装包。此压缩文件内含32位与64位两种规格的Chrome浏览器离线安装方案,具体文件名分别为"chromedev_x64-v68.0.3423.2.exe"与"chromedev_x86-v68.0.3423.2.exe"。在文件命名中,"x64"标识64位版本,适用于64位操作系统平台,而"x86"则对应32位版本,适配32位操作系统。文件名中的"v68.0.3423.2"代表Chrome的一个特定版本号,各版本可能涵盖安全补丁、性能改进或新增功能。与32位Chrome相比,64位版本具备如下长处:能够处理更多内存容量,从而提升多任务作业能力;针对现代硬件的优化使其运行更为迅猛;64位版本更具备高级别的安全防护,能更周全地抵御恶意软件的侵袭。尽管如此,32位版本对于仍在使用32位操作系统的用户,或是在系统资源需求不高的场景下,依然适用。在部署Chrome浏览器时,用户需依据其个人计算机的操作系统平台,挑选匹配的版本进行安装。通过双击相应的.exe文件,安装流程将自动启动,一般包含接受使用许可、确定安装路径及构建桌面快捷方式等环节。若在安装阶段遭遇难题,可参照提示信息或联系技术支援获取协助,同时该压缩文件发布者亦表明欢迎用户以留言形式反映问题。Chrome浏览器的主要特质涵盖:直观的用户界面设计...
内容概要:本文围绕直驱式永磁同步电机(PMSM)矢量控制系统的建模与仿真展开研究,基于Simulink平台构建了完整的控制系统仿真模型,涵盖了电机本体数学建模、三相/两相坐标变换(Clarke/Park变换)、磁场定向控制(FOC)、电流环与速度环双闭环PID控制策略、空间矢量脉宽调制(SVPWM)技术以及转速调节器设计等核心技术环节。通过仿真实验验证了该控制策略在动态响应速度、稳态运行精度及抗负载扰动能力方面的优良性能,充分体现了矢量控制在实现电机高性能调速中的优势,为永磁同步电机在工业驱动、新能源汽车和高端装备制造等领域的实际应用提供了可靠的理论依据与技术支撑。; 适合群:具备电机学、电力电子技术和自动控制原理基础知识的电气工程、自动化、机电一体化等相关专业的研究生、高校教师、科研员,以及从事电机驱动系统、新能源汽车电驱、工业自动化设备研发的工程技术员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的基本原理与实现机制;②掌握在Simulink中搭建高精度电机控制系统仿真模型的方法与技巧;③为电机控制算法的设计、优化与参数整定提供高效的仿真验证平台;④服务于高校课程设计、毕业课题研究、科研项目前期验证及企业产品开发中的控制策略测试。; 阅读建议:建议结合经典电机控制教材进行对照学习,重点关注各功能模块间的信号流向、反馈机制与参数耦合关系,动手复现并调试仿真模型,通过改变PI参数、负载条件和给定转速等方式观察系统响应,从而深入掌握控制策略的内在逻辑与性能优化方法。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Java学习路线(鱼皮)是一个全面且循序渐进的Java开发技能培养方案,该路线从基础入门直至高级应用,致力于协助学习者高效地掌握Java编程的全部核心内容。此学习路线的独特之处在于其新颖性、系统性、实践性、开放性以及社区回馈与持续迭代更新。其核心构成涵盖了预备阶段、Java入门知识、Java进阶技能、Java高级技术、Java框架应用以及Java项目实践等多个学习模块,每个模块均整合了相应的知识点、学习策略与资源指引。在预备阶段,学习者需配置在线编程环境、选择笔记工具、熟悉Markdown文档编写等基本技能,为编程学习奠定基础。在Java入门阶段,学习者应重点掌握Java编程的基础理论、开发环境配置、IDEA集成开发环境的使用、项目创建与执行调试、界面设置及插件配置等关键技能。在Java入门阶段,学习者还须深入理解Java基础语法、数据结构类型、程序流程控制、数组操作、面向对象编程、方法重载机制、封装原则、继承特性、多态表现、抽象类的概念、接口定义、枚举类型、常用类库、字符串处理、日期时间管理、集合框架、泛型编程、注解应用、异常处理机制、多线程技术、IO流操作、反射机制等核心知识点。在Java进阶阶段,学习者需要重点学习Java 8的更新特性、Stream API的应用、Lambda表达式的使用、新的日期时间处理API以及接口默认方法的实现。在Java高级阶段,学习者需要掌握Java框架的应用、Spring Boot框架的搭建、Spring Cloud微服务架构的实施等高级技术。在Java项目阶段,学习者需要学习Java项目开发的全过程操作,包括项目架构设计、项目编码实现、项...
内容概要:本文围绕基于Matlab代码实现的卫星信号传播模拟研究,系统阐述了卫星信号在大气层及空间环境中传播特性的数值仿真方法。研究通过建立精确的数学模型,对信号衰减、传输延迟、多普勒效应以及噪声干扰等关键物理现象进行建模与仿真分析,全面还原实际通信场景下的信号行为特征。该仿真体系不仅可用于验证通信链路设计的可靠性,还能为星地链路预算、抗干扰策略优化及接收机算法开发提供理论依据和技术支持。; 适合群:具备一定Matlab编程能力、通信原理基础和电磁波传播知识的高校研究生、科研机构研究员及从事卫星通信系统设计与仿真的工程技术员。; 使用场景及目标:①用于高校课程中卫星通信相关理论的教学演示与实验教学;②支撑航通信项目的链路性能评估与系统参数优化;③为新型调制解调、纠错编码和信号增强算法的研发提供可验证的仿真平台;④辅助科研员开展低轨星座、深空探测等前沿领域的通信建模研究; 阅读建议:建议读者结合经典通信理论教材,深入理解各模块的物理意义,动手运行并调试提供的Matlab代码,尝试调整轨道参数、大气模型和噪声水平等变量,观察其对信号质量的影响,进而拓展模型以适配不同卫星轨道类型或复杂多径环境,提升综合仿真与分析能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值